diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/AllContraptionTypes.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/AllContraptionTypes.java new file mode 100644 index 000000000..70ebec4c6 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/AllContraptionTypes.java @@ -0,0 +1,38 @@ +package com.simibubi.create.modules.contraptions.components.contraptions; + +import java.util.function.Supplier; + +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.modules.contraptions.components.contraptions.bearing.BearingContraption; +import com.simibubi.create.modules.contraptions.components.contraptions.bearing.ClockworkContraption; +import com.simibubi.create.modules.contraptions.components.contraptions.mounted.MountedContraption; +import com.simibubi.create.modules.contraptions.components.contraptions.piston.PistonContraption; +import com.simibubi.create.modules.contraptions.components.contraptions.pulley.PulleyContraption; + +public enum AllContraptionTypes { + + PISTON(PistonContraption::new), + BEARING(BearingContraption::new), + PULLEY(PulleyContraption::new), + CLOCKWORK(ClockworkContraption::new), + MOUNTED(MountedContraption::new), + + ; + + Supplier factory; + String id; + + private AllContraptionTypes(Supplier factory) { + this.factory = factory; + id = Lang.asId(name()); + } + + public static Contraption fromType(String type) { + for (AllContraptionTypes allContraptionTypes : values()) { + if (type.equals(allContraptionTypes.id)) + return allContraptionTypes.factory.get(); + } + return null; + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/Contraption.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/Contraption.java index bbdd0f0ba..de2c3efc7 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/Contraption.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/Contraption.java @@ -14,7 +14,6 @@ import java.util.Set; import java.util.function.BiConsumer; import java.util.function.BiPredicate; import java.util.function.Function; -import java.util.function.Supplier; import java.util.stream.Collectors; import org.apache.commons.lang3.tuple.MutablePair; @@ -53,9 +52,7 @@ import net.minecraft.world.gen.feature.template.Template.BlockInfo; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.wrapper.CombinedInvWrapper; -public class Contraption { - - protected static Map> deserializers = new HashMap<>(); +public abstract class Contraption { public Map blocks; public Map storage; @@ -69,10 +66,6 @@ public class Contraption { protected Direction cachedColliderDirection; protected BlockPos anchor; - protected static void register(String name, Supplier factory) { - deserializers.put(name, factory); - } - public Contraption() { blocks = new HashMap<>(); storage = new HashMap<>(); @@ -481,9 +474,7 @@ public class Contraption { public static Contraption fromNBT(World world, CompoundNBT nbt) { String type = nbt.getString("Type"); - Contraption contraption = new Contraption(); - if (deserializers.containsKey(type)) - contraption = deserializers.get(type).get(); + Contraption contraption = AllContraptionTypes.fromType(type); contraption.readNBT(world, nbt); return contraption; } @@ -525,7 +516,7 @@ public class Contraption { public CompoundNBT writeNBT() { CompoundNBT nbt = new CompoundNBT(); - nbt.putString("Type", getType()); + nbt.putString("Type", getType().id); ListNBT blocksNBT = new ListNBT(); for (BlockInfo block : this.blocks.values()) { CompoundNBT c = new CompoundNBT(); @@ -669,8 +660,6 @@ public class Contraption { return ((IPortableBlock) block).getMovementBehaviour(); } - protected String getType() { - return "Contraption"; - } + protected abstract AllContraptionTypes getType(); } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/BearingContraption.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/BearingContraption.java index 3107f3f70..f7c4aafd1 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/BearingContraption.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/BearingContraption.java @@ -3,6 +3,7 @@ package com.simibubi.create.modules.contraptions.components.contraptions.bearing import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlockTags; +import com.simibubi.create.modules.contraptions.components.contraptions.AllContraptionTypes; import com.simibubi.create.modules.contraptions.components.contraptions.Contraption; import net.minecraft.nbt.CompoundNBT; @@ -16,16 +17,10 @@ public class BearingContraption extends Contraption { protected int sailBlocks; protected Direction facing; - - private static String type = "Bearing"; - - static { - register(type, BearingContraption::new); - } @Override - protected String getType() { - return type; + protected AllContraptionTypes getType() { + return AllContraptionTypes.BEARING; } public static BearingContraption assembleBearingAt(World world, BlockPos pos, Direction direction) { diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/ClockworkContraption.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/ClockworkContraption.java index 098e1213d..7205526cf 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/ClockworkContraption.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/ClockworkContraption.java @@ -8,6 +8,7 @@ import java.util.function.BiPredicate; import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.foundation.utility.NBTHelper; +import com.simibubi.create.modules.contraptions.components.contraptions.AllContraptionTypes; import com.simibubi.create.modules.contraptions.components.contraptions.Contraption; import net.minecraft.block.BlockState; @@ -23,15 +24,9 @@ public class ClockworkContraption extends Contraption { public int offset; private Set ignoreBlocks = new HashSet<>(); - private static String type = "Clockwork"; - - static { - register(type, ClockworkContraption::new); - } - @Override - protected String getType() { - return type; + protected AllContraptionTypes getType() { + return AllContraptionTypes.CLOCKWORK; } private void ignoreBlocks(Set blocks, BlockPos anchor) { diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/mounted/MountedContraption.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/mounted/MountedContraption.java index ca873a4ea..eee8cf6be 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/mounted/MountedContraption.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/mounted/MountedContraption.java @@ -7,6 +7,7 @@ import java.util.List; import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlocks; +import com.simibubi.create.modules.contraptions.components.contraptions.AllContraptionTypes; import com.simibubi.create.modules.contraptions.components.contraptions.Contraption; import net.minecraft.block.BlockState; @@ -25,15 +26,9 @@ import net.minecraft.world.gen.feature.template.Template.BlockInfo; public class MountedContraption extends Contraption { - private static String type = "Mounted"; - - static { - register(type, MountedContraption::new); - } - @Override - protected String getType() { - return type; + protected AllContraptionTypes getType() { + return AllContraptionTypes.MOUNTED; } public static Contraption assembleMinecart(World world, BlockPos pos, AbstractMinecartEntity cart) { diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/PistonContraption.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/PistonContraption.java index 15016f706..658b87ee2 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/PistonContraption.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/PistonContraption.java @@ -13,6 +13,7 @@ import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlocks; import com.simibubi.create.config.AllConfigs; import com.simibubi.create.foundation.utility.NBTHelper; +import com.simibubi.create.modules.contraptions.components.contraptions.AllContraptionTypes; import com.simibubi.create.modules.contraptions.components.contraptions.Contraption; import com.simibubi.create.modules.contraptions.components.contraptions.piston.MechanicalPistonBlock.PistonState; @@ -37,16 +38,11 @@ public class PistonContraption extends Contraption { protected int initialExtensionProgress; protected Direction orientation; - private static String type = "Piston"; - - static { - register(type, PistonContraption::new); + @Override + protected AllContraptionTypes getType() { + return AllContraptionTypes.PISTON; } - @Override - protected String getType() { - return type; - } public static PistonContraption movePistonAt(World world, BlockPos pos, Direction direction, boolean retract) { if (isFrozen()) return null; diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/pulley/PulleyContraption.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/pulley/PulleyContraption.java index c2972c8c4..2382a0a94 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/pulley/PulleyContraption.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/pulley/PulleyContraption.java @@ -1,5 +1,6 @@ package com.simibubi.create.modules.contraptions.components.contraptions.pulley; +import com.simibubi.create.modules.contraptions.components.contraptions.AllContraptionTypes; import com.simibubi.create.modules.contraptions.components.contraptions.Contraption; import net.minecraft.nbt.CompoundNBT; @@ -11,15 +12,9 @@ public class PulleyContraption extends Contraption { int initialOffset; - private static String type = "Pulley"; - - static { - register(type, PulleyContraption::new); - } - @Override - protected String getType() { - return type; + protected AllContraptionTypes getType() { + return AllContraptionTypes.PULLEY; } public static PulleyContraption assemblePulleyAt(World world, BlockPos pos, int initialOffset) {