Bump Libzontreck
This commit is contained in:
parent
4a7a8dd202
commit
2717c90cff
20 changed files with 19 additions and 926 deletions
|
@ -2,8 +2,7 @@
|
|||
# This is required to provide enough memory for the Minecraft decompilation process.
|
||||
org.gradle.jvmargs=-Xmx3G
|
||||
org.gradle.daemon=false
|
||||
|
||||
libzontreck=1201.11.040124.0231
|
||||
libzontreck=1201.13.043024.0404
|
||||
|
||||
## Environment Properties
|
||||
|
||||
|
@ -48,14 +47,14 @@ mod_name=Thresholds
|
|||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||
mod_license=GPLv3
|
||||
# The mod version. See https://semver.org/
|
||||
mod_version=1201.4.040724.2332
|
||||
mod_version=1201.4.043024.0426
|
||||
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
||||
# This should match the base package used for the mod sources.
|
||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||
mod_group_id=dev.zontreck
|
||||
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
|
||||
mod_authors=zontreck
|
||||
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
|
||||
# The description of the mod. This is a simple multiline text string that is used for display purposes \in the mod list.
|
||||
mod_description=Thresholds
|
||||
|
||||
# Pack version - this changes each minecraft release, in general.
|
||||
|
|
|
@ -7,8 +7,6 @@ import dev.zontreck.libzontreck.edlibmc.Registries;
|
|||
import dev.zontreck.libzontreck.profiles.Profile;
|
||||
import dev.zontreck.libzontreck.profiles.UserProfileNotYetExistsException;
|
||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||
import dev.zontreck.otemod.blocks.DeprecatedModBlocks;
|
||||
import dev.zontreck.otemod.configs.snbt.ServerConfig;
|
||||
import dev.zontreck.otemod.effects.ModEffects;
|
||||
|
@ -73,7 +71,6 @@ import dev.zontreck.otemod.networking.ModMessages;
|
|||
@Mod(OTEMod.MOD_ID)
|
||||
public class OTEMod
|
||||
{
|
||||
public static final Vector3 ZERO_VECTOR = new Vector3(0,0,0);
|
||||
// Directly reference a slf4j logger
|
||||
public static final Logger LOGGER = LogUtils.getLogger();
|
||||
public static final String MOD_ID = "otemod";
|
||||
|
@ -116,7 +113,6 @@ public class OTEMod
|
|||
MinecraftForge.EVENT_BUS.register(new ChatServerOverride());
|
||||
MinecraftForge.EVENT_BUS.register(new CommandRegistry());
|
||||
MinecraftForge.EVENT_BUS.register(new VaultWatcher());
|
||||
MinecraftForge.EVENT_BUS.register(new dev.zontreck.otemod.zschem.EventHandler());
|
||||
ModMenuTypes.CONTAINERS.register(bus);
|
||||
MinecraftForge.EVENT_BUS.register(FlightEnchantment.class);
|
||||
MinecraftForge.EVENT_BUS.register(NightVisionEnchantment.class);
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
package dev.zontreck.otemod.commands.antigrief;
|
||||
|
||||
// This will accelerate the healing queue, not do it instantly!
|
||||
// The queue will get processed at a rate of 10* the configured rate.
|
||||
public class HealNow
|
||||
{
|
||||
|
||||
}
|
|
@ -4,7 +4,7 @@ import com.mojang.brigadier.CommandDispatcher;
|
|||
import dev.zontreck.libzontreck.events.TeleportEvent;
|
||||
import dev.zontreck.libzontreck.exceptions.InvalidDeserialization;
|
||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3d;
|
||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||
import dev.zontreck.otemod.configs.snbt.ServerConfig;
|
||||
import dev.zontreck.otemod.implementation.Messages;
|
||||
|
@ -45,7 +45,7 @@ public class BuildCommand
|
|||
WorldPosition save = new WorldPosition(sp);
|
||||
PerPlayerDataRegistry.put(sp.getUUID(), "builder_entered_from", save.serialize());
|
||||
|
||||
WorldPosition pos = new WorldPosition(new Vector3(0, -55, 0), ModDimensions.BUILDER_DIM());
|
||||
WorldPosition pos = new WorldPosition(new Vector3d(0, -55, 0), ModDimensions.BUILDER_DIM());
|
||||
|
||||
if(!MinecraftForge.EVENT_BUS.post(new TeleportEvent(pos, sp)))
|
||||
stack.getPlayer().teleportTo(pos.getActualDimension(), pos.Position.x, pos.Position.y, pos.Position.z, 0, 0);
|
||||
|
|
|
@ -3,14 +3,9 @@ package dev.zontreck.otemod.commands.zschem;
|
|||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import dev.zontreck.otemod.integrations.LuckPermsHelper;
|
||||
import dev.zontreck.otemod.permissions.Permissions;
|
||||
import dev.zontreck.otemod.zschem.MemoryHolder;
|
||||
import dev.zontreck.otemod.zschem.MemoryHolder.Container;
|
||||
import dev.zontreck.otemod.zschem.StoredBlock;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
|
@ -46,6 +41,7 @@ public class LoadSchem {
|
|||
// Perform sanity checks
|
||||
|
||||
|
||||
/*
|
||||
ServerPlayer play = (ServerPlayer)source.getEntity();
|
||||
if(play==null)return 1;
|
||||
|
||||
|
@ -125,6 +121,7 @@ public class LoadSchem {
|
|||
}
|
||||
ChatHelpers.broadcastTo(play.getUUID(), ChatHelpers.macro("!Dark_Red! You must set the first position"), ServerLifecycleHooks.getCurrentServer());
|
||||
|
||||
return 0;*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,11 +4,6 @@ import com.mojang.brigadier.CommandDispatcher;
|
|||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import dev.zontreck.otemod.integrations.LuckPermsHelper;
|
||||
import dev.zontreck.otemod.permissions.Permissions;
|
||||
import dev.zontreck.otemod.zschem.MemoryHolder;
|
||||
import dev.zontreck.otemod.zschem.MemoryHolder.Container;
|
||||
import dev.zontreck.otemod.zschem.StoredBlock;
|
||||
import dev.zontreck.otemod.zschem.WorldProp;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
|
@ -34,7 +29,7 @@ public class Place {
|
|||
|
||||
ServerPlayer play = (ServerPlayer)source.getEntity();
|
||||
if(play==null)return 1;
|
||||
|
||||
/*
|
||||
if(!LuckPermsHelper.hasGroupOrPerm(play, Permissions.zschem, Permissions.zschem_place)){
|
||||
LuckPermsHelper.sendNoPermissionsMessage(play, Permissions.zschem_place, Permissions.zschem);
|
||||
return 1;
|
||||
|
@ -70,7 +65,7 @@ public class Place {
|
|||
|
||||
|
||||
ChatHelpers.broadcastTo(play.getUUID(), ChatHelpers.macro(OTEMod.OTEPrefix+" !Dark_Green!Enqueued!"), ServerLifecycleHooks.getCurrentServer());
|
||||
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,14 +2,8 @@ package dev.zontreck.otemod.commands.zschem;
|
|||
|
||||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import dev.zontreck.otemod.integrations.LuckPermsHelper;
|
||||
import dev.zontreck.otemod.permissions.Permissions;
|
||||
import dev.zontreck.otemod.zschem.MemoryHolder;
|
||||
import dev.zontreck.otemod.zschem.MemoryHolder.Container;
|
||||
import dev.zontreck.otemod.zschem.StoredBlock;
|
||||
import dev.zontreck.otemod.zschem.WorldProp;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
|
@ -35,6 +29,7 @@ public class PlaceAsAir {
|
|||
|
||||
private static int place(CommandSourceStack source) {
|
||||
|
||||
/*
|
||||
ServerPlayer play = (ServerPlayer)source.getEntity();
|
||||
if(play==null)return 1;
|
||||
|
||||
|
@ -77,7 +72,7 @@ public class PlaceAsAir {
|
|||
|
||||
|
||||
ChatHelpers.broadcastTo(play.getUUID(), ChatHelpers.macro(OTEMod.OTEPrefix+" !Dark_Green!Enqueued!"), ServerLifecycleHooks.getCurrentServer());
|
||||
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,13 +3,8 @@ package dev.zontreck.otemod.commands.zschem;
|
|||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import dev.zontreck.otemod.integrations.LuckPermsHelper;
|
||||
import dev.zontreck.otemod.permissions.Permissions;
|
||||
import dev.zontreck.otemod.zschem.MemoryHolder;
|
||||
import dev.zontreck.otemod.zschem.MemoryHolder.Container;
|
||||
import dev.zontreck.otemod.zschem.StoredBlock;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -44,7 +39,7 @@ public class SaveSchem {
|
|||
|
||||
ServerPlayer play = (ServerPlayer)source.getEntity();
|
||||
if(play==null)return 1;
|
||||
|
||||
/*
|
||||
if(!LuckPermsHelper.hasGroupOrPerm(play, Permissions.zschem, Permissions.zschem_save)){
|
||||
LuckPermsHelper.sendNoPermissionsMessage(play, Permissions.zschem_save, Permissions.zschem);
|
||||
return 1;
|
||||
|
@ -110,7 +105,7 @@ public class SaveSchem {
|
|||
}
|
||||
}
|
||||
ChatHelpers.broadcastTo(play.getUUID(), ChatHelpers.macro("!Dark_Red! You must first set the positions"), ServerLifecycleHooks.getCurrentServer());
|
||||
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,11 +3,8 @@ package dev.zontreck.otemod.commands.zschem;
|
|||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import dev.zontreck.libzontreck.chat.ChatColor;
|
||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import dev.zontreck.otemod.integrations.LuckPermsHelper;
|
||||
import dev.zontreck.otemod.permissions.Permissions;
|
||||
import dev.zontreck.otemod.zschem.MemoryHolder;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
@ -30,7 +27,7 @@ public class SetPos1 {
|
|||
|
||||
ServerPlayer play = (ServerPlayer)source.getEntity();
|
||||
if(play==null)return 1;
|
||||
|
||||
/*
|
||||
if(!LuckPermsHelper.hasGroupOrPerm(play, Permissions.zschem, Permissions.zschem_pos1)){
|
||||
LuckPermsHelper.sendNoPermissionsMessage(play, Permissions.zschem_pos1, Permissions.zschem);
|
||||
return 1;
|
||||
|
@ -39,7 +36,7 @@ public class SetPos1 {
|
|||
MemoryHolder.setLevel(play, source.getLevel());
|
||||
|
||||
ChatHelpers.broadcastTo(play.getUUID(), Component.literal(OTEMod.OTEPrefix+ChatColor.doColors(" !Dark_Green!Position 1 set!")), ServerLifecycleHooks.getCurrentServer());
|
||||
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,11 +3,8 @@ package dev.zontreck.otemod.commands.zschem;
|
|||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import dev.zontreck.libzontreck.chat.ChatColor;
|
||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import dev.zontreck.otemod.integrations.LuckPermsHelper;
|
||||
import dev.zontreck.otemod.permissions.Permissions;
|
||||
import dev.zontreck.otemod.zschem.MemoryHolder;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
@ -30,6 +27,7 @@ public class SetPos2 {
|
|||
ServerPlayer play = (ServerPlayer)source.getEntity();
|
||||
if(play==null)return 1;
|
||||
|
||||
/*
|
||||
if(!LuckPermsHelper.hasGroupOrPerm(play, Permissions.zschem, Permissions.zschem_pos2)){
|
||||
LuckPermsHelper.sendNoPermissionsMessage(play, Permissions.zschem_pos2, Permissions.zschem);
|
||||
return 1;
|
||||
|
@ -39,7 +37,7 @@ public class SetPos2 {
|
|||
MemoryHolder.setLevel(play, source.getLevel());
|
||||
|
||||
ChatHelpers.broadcastTo(play.getUUID(), Component.literal(OTEMod.OTEPrefix+ChatColor.doColors(" !Dark_Green!Position 2 set!")), ServerLifecycleHooks.getCurrentServer());
|
||||
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package dev.zontreck.otemod.events;
|
||||
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergyContainer;
|
||||
import dev.zontreck.otemod.integrations.KeyBindings;
|
||||
|
|
|
@ -8,7 +8,7 @@ import dev.zontreck.libzontreck.profiles.UserProfileNotYetExistsException;
|
|||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||
import dev.zontreck.libzontreck.util.ItemUtils;
|
||||
import dev.zontreck.libzontreck.util.heads.HeadUtilities;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3d;
|
||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import dev.zontreck.otemod.configs.snbt.ServerConfig;
|
||||
|
@ -123,7 +123,7 @@ public class EventHandler {
|
|||
if(ev.getSource().is(DamageTypes.FELL_OUT_OF_WORLD) && (loc.getNamespace().equals(OTEMod.MOD_ID) || loc.getNamespace().equals("minecraft")))
|
||||
{
|
||||
// Teleport the player to Thresholds
|
||||
WorldPosition pos = new WorldPosition(new Vector3(), ModDimensions.THRESHOLD_DIM());
|
||||
WorldPosition pos = new WorldPosition(new Vector3d(), ModDimensions.THRESHOLD_DIM());
|
||||
ServerPlayer sp = (ServerPlayer) ev.getEntity();
|
||||
if(!MinecraftForge.EVENT_BUS.post(new TeleportEvent(pos, sp)))
|
||||
sp.teleportTo(pos.getActualDimension(), 0, 365, 0, 0,0);
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
package dev.zontreck.otemod.permissions;
|
||||
|
||||
public class Permissions {
|
||||
public static String zschem = "group.otemod.zschem";
|
||||
public static String zschem_load = "otemod.commands.zschem.loadzschem";
|
||||
public static String zschem_save = "otemod.commands.zschem.savezschem";
|
||||
public static String zschem_place = "otemod.commands.zschem.placezschem";
|
||||
public static String zschem_pos1 = "otemod.commands.zschem.pos1";
|
||||
public static String zschem_pos2 = "otemod.commands.zschem.pos2";
|
||||
public static String zschem_air = "otemod.commands.zschem.setair";
|
||||
|
||||
|
||||
}
|
|
@ -1,130 +0,0 @@
|
|||
package dev.zontreck.otemod.zschem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||
import dev.zontreck.otemod.configs.snbt.ServerConfig;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.ListTag;
|
||||
import net.minecraft.nbt.Tag;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public class BlockContainerList {
|
||||
private static final BlockContainerList INSTANCE =new BlockContainerList();
|
||||
private final Lock lock;
|
||||
private final List<StoredBlock> containers;
|
||||
|
||||
public BlockContainerList()
|
||||
{
|
||||
this.lock = new ReentrantLock();
|
||||
this.containers = new ArrayList<>();
|
||||
}
|
||||
|
||||
public static BlockContainerList getInstance()
|
||||
{
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public int getNewLongestTick()
|
||||
{
|
||||
//Random rng = new Random();
|
||||
int newLonger = ServerConfig.antigrief.timeBetween;
|
||||
int cur = 0;
|
||||
|
||||
for (StoredBlock storedBlock : containers) {
|
||||
if(cur < storedBlock.getTickValue()){
|
||||
cur = storedBlock.getTickValue();
|
||||
}
|
||||
}
|
||||
if(cur == 0)cur = ServerConfig.antigrief.healerTimer;
|
||||
|
||||
return cur + newLonger;
|
||||
}
|
||||
|
||||
public void add(StoredBlock item)
|
||||
{
|
||||
lock.lock();
|
||||
try{
|
||||
for(StoredBlock sb : containers)
|
||||
{
|
||||
if(sb.getWorldPosition().same(item.getWorldPosition()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
containers.add(item);
|
||||
}finally{
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public void tick()
|
||||
{
|
||||
lock.lock();
|
||||
try{
|
||||
Iterator<StoredBlock> isb = containers.iterator();
|
||||
while(isb.hasNext())
|
||||
{
|
||||
StoredBlock storedBlock = isb.next();
|
||||
storedBlock.tick();
|
||||
if(storedBlock.isExpired()){
|
||||
WorldPosition wp = storedBlock.getWorldPosition();
|
||||
BlockState bs = wp.getActualDimension().getBlockState(wp.Position.asBlockPos());
|
||||
|
||||
if(bs.is(storedBlock.getState().getBlock()) || storedBlock.getTries() >= ServerConfig.antigrief.maxTries)
|
||||
{
|
||||
|
||||
//HealRunner.scheduleHeal(storedBlock);
|
||||
isb.remove();
|
||||
|
||||
//wp.getActualDimension().playSound(null, wp.Position.asBlockPos(), SoundEvents.ANVIL_USE, SoundSource.NEUTRAL, new Random().nextFloat(0.75f,1.0f), new Random().nextFloat(1));
|
||||
|
||||
}else {
|
||||
HealRunner.scheduleHeal(storedBlock);
|
||||
storedBlock.setTick(getNewLongestTick());
|
||||
storedBlock.tickTries();
|
||||
}
|
||||
}
|
||||
}
|
||||
}finally{
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public CompoundTag save(CompoundTag tag){
|
||||
lock.lock();
|
||||
try{
|
||||
|
||||
ListTag lst = new ListTag();
|
||||
for (StoredBlock block : containers) {
|
||||
lst.add(block.serialize());
|
||||
}
|
||||
tag.put("blocks", lst);
|
||||
return tag;
|
||||
}finally{
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public static BlockContainerList load(CompoundTag tag){
|
||||
BlockContainerList lst = new BlockContainerList();
|
||||
|
||||
ListTag xlst = tag.getList("blocks", CompoundTag.TAG_COMPOUND);
|
||||
ListIterator<Tag> it = xlst.listIterator();
|
||||
while(it.hasNext()){
|
||||
Tag tg = it.next();
|
||||
CompoundTag blk = (CompoundTag)tg;
|
||||
StoredBlock sb = new StoredBlock(blk);
|
||||
|
||||
lst.add(sb);
|
||||
}
|
||||
|
||||
return lst;
|
||||
}
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
package dev.zontreck.otemod.zschem;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import dev.zontreck.libzontreck.util.SNbtIo;
|
||||
import dev.zontreck.otemod.configs.snbt.ServerConfig;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.NbtIo;
|
||||
import net.minecraftforge.fml.loading.FMLConfig;
|
||||
import net.minecraftforge.fml.loading.FMLPaths;
|
||||
|
||||
public class BlockSaver {
|
||||
private static final int SAVE_INTERVAL = 1;
|
||||
|
||||
private final ScheduledExecutorService executor;
|
||||
|
||||
public BlockSaver(ScheduledExecutorService service)
|
||||
{
|
||||
executor=service;
|
||||
}
|
||||
|
||||
public void start()
|
||||
{
|
||||
executor.scheduleAtFixedRate(()->{
|
||||
CompoundTag primary = new CompoundTag();
|
||||
primary=BlockContainerList.getInstance().save(primary);
|
||||
|
||||
File x = getPath().toFile();
|
||||
|
||||
if(ServerConfig.antigrief.debug)
|
||||
{
|
||||
// Save as sNBT
|
||||
SNbtIo.writeSnbt(x.toPath(), primary);
|
||||
}else{
|
||||
try {
|
||||
NbtIo.writeCompressed(primary, x);
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}, SAVE_INTERVAL, SAVE_INTERVAL, TimeUnit.MINUTES);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Healer Queue's data source is a NBT File in the config folder
|
||||
public static final String HealerQueueFile = ".nbt";
|
||||
public static final String HealerQueueDebugFile = ".dev.snbt";
|
||||
|
||||
public static Path getPath()
|
||||
{
|
||||
|
||||
Path configDir = FMLPaths.GAMEDIR.get().resolve(FMLConfig.defaultConfigPath());
|
||||
//Path configFile = null;
|
||||
return configDir.resolve("ote_queue");
|
||||
}
|
||||
|
||||
public static String getExtension()
|
||||
{
|
||||
|
||||
if(ServerConfig.antigrief.debug)
|
||||
{
|
||||
return BlockSaver.HealerQueueDebugFile;
|
||||
|
||||
}else {
|
||||
return BlockSaver.HealerQueueFile;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,82 +0,0 @@
|
|||
package dev.zontreck.otemod.zschem;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||
import dev.zontreck.otemod.configs.snbt.ServerConfig;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
import net.minecraftforge.event.level.ExplosionEvent;
|
||||
import net.minecraftforge.event.level.LevelEvent;
|
||||
import net.minecraftforge.event.server.ServerStoppingEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
|
||||
public class EventHandler {
|
||||
|
||||
@SubscribeEvent
|
||||
public void onDetonate(ExplosionEvent ev)
|
||||
{
|
||||
if(ev.getLevel().isClientSide)return;
|
||||
|
||||
//Entity explodes = ev.getExplosion().getSourceMob();
|
||||
// Register blocks to be healed
|
||||
WorldPosition wpos = new WorldPosition(new Vector3(ev.getExplosion().getPosition()), (ServerLevel) ev.getLevel());
|
||||
|
||||
if(ServerConfig.antigrief.blacklistedDimensions.contains(wpos.Dimension)){
|
||||
// Dimension is on the exclusion list. Do not process.
|
||||
return;
|
||||
}
|
||||
WorldProp wp = WorldProp.acquire((ServerLevel)ev.getLevel());
|
||||
|
||||
if(wp!=null){
|
||||
wp.onDetonate(ev);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Map<ServerLevel, WorldProp> healers = new HashMap<ServerLevel, WorldProp>();
|
||||
|
||||
public Map<ServerLevel, WorldProp> getHealers()
|
||||
{
|
||||
return healers;
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onUnload(LevelEvent.Unload ev)
|
||||
{
|
||||
if(!ev.getLevel().isClientSide())
|
||||
{
|
||||
healers.remove(ev.getLevel());
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onShutdown(ServerStoppingEvent ev)
|
||||
{
|
||||
WorldProp.SaveAll();
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onSaving(LevelEvent.Save ev)
|
||||
{
|
||||
WorldProp.SaveAll();
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onLevelTick(TickEvent.LevelTickEvent ev)
|
||||
{
|
||||
if(!ev.level.isClientSide){
|
||||
WorldProp wp = WorldProp.acquire((ServerLevel)ev.level);
|
||||
if(wp!=null){
|
||||
wp.onTick();
|
||||
} else {
|
||||
if(!healers.containsKey((ServerLevel) ev.level))
|
||||
healers.put((ServerLevel) ev.level, wp);
|
||||
}
|
||||
|
||||
MemoryHolder.tick();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
package dev.zontreck.otemod.zschem;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import dev.zontreck.libzontreck.exceptions.InvalidSideException;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public class HealRunner implements Runnable
|
||||
{
|
||||
public final StoredBlock BlockToSet;
|
||||
// Play a popping sound at the block position
|
||||
public final SoundEvent pop = SoundEvents.ITEM_PICKUP;
|
||||
|
||||
|
||||
public HealRunner(StoredBlock sb)
|
||||
{
|
||||
BlockToSet = sb;
|
||||
}
|
||||
public static void scheduleHeal(StoredBlock sb){
|
||||
sb.getWorldPosition().getActualDimension().getServer().execute(new HealRunner(sb));
|
||||
|
||||
}
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
|
||||
//BlockSnapshot bs = BlockSnapshot.create(level.dimension(), level, sb.getPos());
|
||||
|
||||
//BlockState current = level.getBlockState(sb.getPos());
|
||||
ServerLevel level = (ServerLevel) BlockToSet.getWorldPosition().getActualDimension();
|
||||
|
||||
|
||||
BlockState nState = Block.updateFromNeighbourShapes(BlockToSet.getState(), level, BlockToSet.getPos());
|
||||
level.setBlock(BlockToSet.getPos(), nState, Block.UPDATE_CLIENTS); // no update?
|
||||
|
||||
|
||||
//level.setBlocksDirty(sb.getPos(), sb.getState(), level.getBlockState(sb.getPos()));
|
||||
//level.markAndNotifyBlock(sb.getPos(), level.getChunkAt(sb.getPos()), sb.getState(), level.getBlockState(sb.getPos()), 2, 0);
|
||||
|
||||
//level.getChunkAt(sb.getPos()).setBlockState(sb.getPos(), sb.getState(), false);
|
||||
|
||||
BlockEntity be = level.getBlockEntity(BlockToSet.getPos());
|
||||
|
||||
if(be!=null){
|
||||
//be.deserializeNBT(sb.getBlockEntity());
|
||||
if(BlockToSet.getBlockEntity()!=null){
|
||||
|
||||
be.load(BlockToSet.getBlockEntity());
|
||||
be.setChanged();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Everything is restored, play sound
|
||||
SoundSource ss = SoundSource.NEUTRAL;
|
||||
Vector3 v3 = BlockToSet.getWorldPosition().Position;
|
||||
Random rng = new Random();
|
||||
|
||||
level.playSound(null, v3.asBlockPos(), pop, ss, rng.nextFloat(0.75f,1.0f), rng.nextFloat(1));
|
||||
|
||||
/*for(ServerPlayer player : level.players())
|
||||
{
|
||||
Vector3 playerPos = new Vector3(player.position());
|
||||
if(sb.getWorldPosition().Position.distance(playerPos) < 15)
|
||||
{
|
||||
// have player's client play sound (Packet?)
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
||||
}
|
|
@ -1,178 +0,0 @@
|
|||
package dev.zontreck.otemod.zschem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
import dev.zontreck.libzontreck.chat.ChatColor;
|
||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.otemod.OTEMod;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
|
||||
public class MemoryHolder {
|
||||
// This class holds the temporary memory related to zschem data
|
||||
// We also store position information here.
|
||||
private static final MemoryHolder INSTANCE = new MemoryHolder();
|
||||
|
||||
public static MemoryHolder get(){
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public class Container{
|
||||
// Contains the position and block lists!
|
||||
public Vector3 Pos1;
|
||||
public Vector3 Pos2;
|
||||
public List<StoredBlock> blocks;
|
||||
public ServerLevel lvl;
|
||||
|
||||
private int tick = 0;
|
||||
|
||||
public void tick(){
|
||||
this.tick--;
|
||||
}
|
||||
|
||||
public boolean isExpired(){
|
||||
if(tick <= 0){
|
||||
return true;
|
||||
}else return false;
|
||||
}
|
||||
|
||||
public Container(){
|
||||
tick = 15000;
|
||||
Pos1 = OTEMod.ZERO_VECTOR;
|
||||
Pos2 = OTEMod.ZERO_VECTOR;
|
||||
}
|
||||
|
||||
public void reset(){
|
||||
tick=15000;
|
||||
}
|
||||
}
|
||||
|
||||
private Map<UUID, Container> playerContainers = new HashMap<UUID,Container>();
|
||||
private static final Lock lck = new ReentrantLock();
|
||||
|
||||
public static boolean hasPlayerCached(Player P)
|
||||
{
|
||||
lck.lock();
|
||||
try{
|
||||
|
||||
UUID id = P.getUUID();
|
||||
return get().playerContainers.containsKey(id);
|
||||
}finally{
|
||||
lck.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public static void tick()
|
||||
{
|
||||
lck.lock();
|
||||
try{
|
||||
Iterator<Map.Entry<UUID,Container>> imeuc = get().playerContainers.entrySet().iterator();
|
||||
while(imeuc.hasNext())
|
||||
{
|
||||
Map.Entry<UUID,Container> entry = imeuc.next();
|
||||
Container c = entry.getValue();
|
||||
c.tick();
|
||||
|
||||
if(c.isExpired()){
|
||||
imeuc.remove();
|
||||
|
||||
ChatHelpers.broadcastTo(entry.getKey(), ChatHelpers.macro(OTEMod.OTEPrefix+ChatColor.doColors(" !Dark_Red!ZSchem Session expired")), c.lvl.getServer());
|
||||
}
|
||||
}
|
||||
}finally{
|
||||
lck.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
private static void makeCachedPlayer(Player p){
|
||||
if(!hasPlayerCached(p)){
|
||||
|
||||
Container c = INSTANCE.new Container();
|
||||
get().playerContainers.put(p.getUUID(), c);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setPos1(Player p, Vector3 pos)
|
||||
{
|
||||
makeCachedPlayer(p);
|
||||
if(hasPlayerCached(p))
|
||||
{
|
||||
Container c = get().playerContainers.get(p.getUUID());
|
||||
c.Pos1 = pos;
|
||||
c.reset();
|
||||
|
||||
get().playerContainers.put(p.getUUID(), c);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setLevel(Player p, ServerLevel lvl)
|
||||
{
|
||||
makeCachedPlayer(p);
|
||||
if(hasPlayerCached(p))
|
||||
{
|
||||
Container c = get().playerContainers.get(p.getUUID());
|
||||
c.lvl = lvl;
|
||||
c.reset();
|
||||
|
||||
get().playerContainers.put(p.getUUID(), c);
|
||||
}
|
||||
}
|
||||
|
||||
public static void clear(Player p)
|
||||
{
|
||||
if(hasPlayerCached(p))
|
||||
{
|
||||
get().playerContainers.remove(p.getUUID());
|
||||
}
|
||||
}
|
||||
|
||||
public static void setPos2(Player p, Vector3 pos)
|
||||
{
|
||||
makeCachedPlayer(p);
|
||||
if(hasPlayerCached(p))
|
||||
{
|
||||
Container c = get().playerContainers.get(p.getUUID());
|
||||
c.Pos2 = pos;
|
||||
c.reset();
|
||||
|
||||
get().playerContainers.put(p.getUUID(), c);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setBlocks(Player p, List<StoredBlock> blk)
|
||||
{
|
||||
makeCachedPlayer(p);
|
||||
if(hasPlayerCached(p))
|
||||
{
|
||||
Container c = get().playerContainers.get(p.getUUID());
|
||||
c.blocks=blk;
|
||||
c.reset();
|
||||
|
||||
get().playerContainers.put(p.getUUID(), c);
|
||||
}
|
||||
}
|
||||
|
||||
public static List<StoredBlock> getBlocks(Player p)
|
||||
{
|
||||
if(hasPlayerCached(p))
|
||||
{
|
||||
return get().playerContainers.get(p.getUUID()).blocks;
|
||||
}else return new ArrayList<StoredBlock>();
|
||||
}
|
||||
|
||||
public static Container getContainer(Player p)
|
||||
{
|
||||
if(hasPlayerCached(p)){
|
||||
return get().playerContainers.get(p.getUUID());
|
||||
}else return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,167 +0,0 @@
|
|||
package dev.zontreck.otemod.zschem;
|
||||
|
||||
import dev.zontreck.libzontreck.exceptions.InvalidDeserialization;
|
||||
import dev.zontreck.libzontreck.vectors.Vector3;
|
||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.HolderGetter;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.NbtUtils;
|
||||
import net.minecraft.nbt.Tag;
|
||||
import net.minecraft.server.Bootstrap;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraftforge.client.model.generators.BlockStateProvider;
|
||||
import net.minecraftforge.registries.RegistryManager;
|
||||
|
||||
public class StoredBlock
|
||||
{
|
||||
|
||||
|
||||
public CompoundTag blockData;
|
||||
|
||||
private WorldPosition position;
|
||||
private BlockState state;
|
||||
private CompoundTag blockEntity;
|
||||
private int tick;
|
||||
private int tries;
|
||||
|
||||
|
||||
public void setPosition(Vector3 pos)
|
||||
{
|
||||
position.Position=pos;
|
||||
}
|
||||
|
||||
public void updateWorld(ServerLevel lv)
|
||||
{
|
||||
position = new WorldPosition(position.Position, lv);
|
||||
}
|
||||
|
||||
|
||||
public void tick(){
|
||||
this.tick--;
|
||||
}
|
||||
|
||||
public void setTick(int tick){
|
||||
this.tick=tick;
|
||||
}
|
||||
|
||||
|
||||
public boolean isExpired() {
|
||||
return tick <= 0;
|
||||
}
|
||||
|
||||
public void replaceBlockState(BlockState state)
|
||||
{
|
||||
this.state=state;
|
||||
}
|
||||
|
||||
|
||||
public StoredBlock(final BlockPos pos, final BlockState toSave, final ServerLevel lvl)
|
||||
{
|
||||
position = new WorldPosition(new Vector3(pos), lvl);
|
||||
|
||||
this.state=toSave;
|
||||
}
|
||||
|
||||
public StoredBlock(final CompoundTag tag)
|
||||
{
|
||||
this.deserialize(tag);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public final BlockPos getPos()
|
||||
{
|
||||
return position.Position.asBlockPos();
|
||||
}
|
||||
|
||||
public final WorldPosition getWorldPosition()
|
||||
{
|
||||
return position;
|
||||
}
|
||||
|
||||
public final BlockState getState()
|
||||
{
|
||||
return state;
|
||||
}
|
||||
|
||||
public final long getChunkX()
|
||||
{
|
||||
Vector3 pos = position.Position;
|
||||
return pos.rounded().x >> 4;
|
||||
}
|
||||
|
||||
public final long getChunkZ()
|
||||
{
|
||||
Vector3 pos = position.Position;
|
||||
return pos.rounded().z >> 4;
|
||||
}
|
||||
|
||||
public void setBlockEntity(BlockEntity entity)
|
||||
{
|
||||
CompoundTag tag = entity.saveWithoutMetadata();
|
||||
this.blockEntity=tag;
|
||||
}
|
||||
|
||||
public final CompoundTag getBlockEntity(){
|
||||
return blockEntity;
|
||||
}
|
||||
|
||||
public static boolean hasBlockEntity(final CompoundTag tag){
|
||||
return tag.contains("entity", Tag.TAG_COMPOUND);
|
||||
}
|
||||
|
||||
|
||||
public CompoundTag serialize()
|
||||
{
|
||||
final CompoundTag tag = new CompoundTag();
|
||||
|
||||
tag.put("pos", position.serialize());
|
||||
tag.put("state", NbtUtils.writeBlockState(state));
|
||||
tag.putInt("tick", tick);
|
||||
tag.putInt("tries", tries);
|
||||
|
||||
if(blockEntity != null) tag.put("entity", blockEntity);
|
||||
|
||||
return tag;
|
||||
}
|
||||
public int getTries(){
|
||||
return tries;
|
||||
}
|
||||
public int getTickValue()
|
||||
{
|
||||
return tick;
|
||||
}
|
||||
|
||||
public void tickTries(){
|
||||
tries++;
|
||||
}
|
||||
|
||||
public void deserialize(final CompoundTag tag)
|
||||
{
|
||||
try {
|
||||
position = new WorldPosition(tag.getCompound("pos"), false);
|
||||
} catch (InvalidDeserialization e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
HolderGetter<Block> hg = position.getActualDimension().holderLookup(Registries.BLOCK);
|
||||
|
||||
|
||||
state = NbtUtils.readBlockState(hg, tag.getCompound("state"));
|
||||
|
||||
final CompoundTag tmp = tag.getCompound("entity");
|
||||
blockEntity = tmp.isEmpty() ? null : tmp;
|
||||
|
||||
tick = tag.getInt("tick");
|
||||
tries=tag.getInt("tries");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,146 +0,0 @@
|
|||
package dev.zontreck.otemod.zschem;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.NbtIo;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraftforge.event.level.ExplosionEvent;
|
||||
|
||||
public class WorldProp implements Supplier<Object>
|
||||
{
|
||||
public static Map<ServerLevel, WorldProp> props = new HashMap<ServerLevel,WorldProp>();
|
||||
private Level world;
|
||||
private BlockContainerList task;
|
||||
|
||||
public WorldProp(){
|
||||
task = new BlockContainerList();
|
||||
}
|
||||
|
||||
public void onTick()
|
||||
{
|
||||
task.tick();
|
||||
}
|
||||
|
||||
public void onDetonate(ExplosionEvent ev)
|
||||
{
|
||||
Level w = ev.getLevel();
|
||||
//int maxTicks = 0;
|
||||
|
||||
for(BlockPos p : ev.getExplosion().getToBlow())
|
||||
{
|
||||
BlockState bsExplode = w.getBlockState(p);
|
||||
if(!isValid(bsExplode))continue;
|
||||
|
||||
if(!bsExplode.isAir() ){
|
||||
//int ticks = OTEServerConfig.HEALER_TIMER.get() + maxTicks + OTEServerConfig.TIME_BETWEEN_BLOCKS.get();
|
||||
//if(ticks<0) ticks = maxTicks + 10;
|
||||
//maxTicks += 10;
|
||||
int ticks = task.getNewLongestTick();
|
||||
|
||||
|
||||
addHeal(p, bsExplode, world, ticks);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void customEnqueue(StoredBlock sb)
|
||||
{
|
||||
int ticks = task.getNewLongestTick();
|
||||
sb.setTick(ticks);
|
||||
task.add(sb);
|
||||
}
|
||||
|
||||
private void addHeal(BlockPos p, BlockState s, Level w, int tick)
|
||||
{
|
||||
StoredBlock sb = new StoredBlock(p, s, (ServerLevel)w);
|
||||
sb.setTick(tick);
|
||||
task.add(sb);
|
||||
world.removeBlockEntity(p);
|
||||
world.setBlock(p, Blocks.AIR.defaultBlockState(), 7);
|
||||
}
|
||||
|
||||
private boolean isValid(BlockState bs)
|
||||
{
|
||||
if(bs.is(BlockTags.DOORS) || bs.is(BlockTags.BEDS) || bs.is(BlockTags.TALL_FLOWERS) || bs.is(Blocks.TNT)){
|
||||
return false;
|
||||
} else return true;
|
||||
}
|
||||
|
||||
|
||||
public static void SaveAll()
|
||||
{
|
||||
Path destBase = BlockSaver.getPath();
|
||||
String ext = BlockSaver.getExtension();
|
||||
|
||||
for (Map.Entry<ServerLevel, WorldProp> entry : props.entrySet()) {
|
||||
// Perform saving
|
||||
String dimsafe = WorldPosition.getDimSafe(entry.getKey());
|
||||
String pathTemp = destBase.toString()+"_"+dimsafe+ext;
|
||||
|
||||
Path finalPath = Path.of(pathTemp);
|
||||
CompoundTag fnl = new CompoundTag();
|
||||
|
||||
fnl = entry.getValue().task.save(fnl);
|
||||
try {
|
||||
NbtIo.writeCompressed(fnl, finalPath.toFile());
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void load(CompoundTag tag)
|
||||
{
|
||||
task = BlockContainerList.load(tag);
|
||||
}
|
||||
|
||||
public static WorldProp acquire(ServerLevel w)
|
||||
{
|
||||
if(props.containsKey(w))
|
||||
{
|
||||
return props.get(w);
|
||||
}
|
||||
Path destBase = BlockSaver.getPath();
|
||||
String ext = BlockSaver.getExtension();
|
||||
String dimsafe = WorldPosition.getDimSafe(w);
|
||||
String pathTemp = destBase.toString()+"_"+dimsafe+ext;
|
||||
|
||||
Path finalPath = Path.of(pathTemp);
|
||||
WorldProp nProp = new WorldProp();
|
||||
nProp.world=w;
|
||||
|
||||
if(finalPath.toFile().exists())
|
||||
{
|
||||
|
||||
try {
|
||||
nProp.load(NbtIo.read(finalPath.toFile()));
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
props.put(w,nProp);
|
||||
return nProp;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Object get()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
}
|
Reference in a new issue