diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index bf280e8fb..b1ba6e3ff 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -9,8 +9,6 @@ import static com.simibubi.create.foundation.data.CreateRegistrate.connectedText import static com.simibubi.create.foundation.data.ModelGen.customItemModel; import static com.simibubi.create.foundation.data.ModelGen.oxidizedItemModel; -import java.util.Vector; - import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.content.AllSections; @@ -204,7 +202,7 @@ import net.minecraftforge.common.ToolType; public class AllBlocks { private static final CreateRegistrate REGISTRATE = Create.registrate() - .itemGroup(() -> Create.baseCreativeTab); + .itemGroup(() -> Create.BASE_CREATIVE_TAB); // Schematics @@ -618,32 +616,31 @@ public class AllBlocks { .blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p, (state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal", state.get(FluidValveBlock.ENABLED) ? "open" : "closed"))) - .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) - .item() - .transform(customItemModel()) - .register(); - - public static final BlockEntry COPPER_VALVE_HANDLE = - REGISTRATE.block("copper_valve_handle", ValveHandleBlock::copper) - .transform(BuilderTransformers.valveHandle(null)) + .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) + .item() + .transform(customItemModel()) .register(); - public static final Vector> DYED_VALVE_HANDLES = - new Vector<>(DyeColor.values().length); + public static final BlockEntry COPPER_VALVE_HANDLE = + REGISTRATE.block("copper_valve_handle", ValveHandleBlock::copper) + .transform(BuilderTransformers.valveHandle(null)) + .register(); + + public static final BlockEntry[] DYED_VALVE_HANDLES = new BlockEntry[DyeColor.values().length]; static { for (DyeColor colour : DyeColor.values()) { String colourName = colour.getString(); - DYED_VALVE_HANDLES.add(REGISTRATE.block(colourName + "_valve_handle", ValveHandleBlock::dyed) - .transform(BuilderTransformers.valveHandle(colour)) - .recipe((c, p) -> ShapedRecipeBuilder.shapedRecipe(c.get()) - .patternLine("#") - .patternLine("-") - .key('#', DyeHelper.getTagOfDye(colour)) - .key('-', AllItemTags.VALVE_HANDLES.tag) - .addCriterion("has_valve", RegistrateRecipeProvider.hasItem(AllItemTags.VALVE_HANDLES.tag)) - .build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_valve_handle"))) - .register()); + DYED_VALVE_HANDLES[colour.ordinal()] = REGISTRATE.block(colourName + "_valve_handle", ValveHandleBlock::dyed) + .transform(BuilderTransformers.valveHandle(colour)) + .recipe((c, p) -> ShapedRecipeBuilder.shapedRecipe(c.get()) + .patternLine("#") + .patternLine("-") + .key('#', DyeHelper.getTagOfDye(colour)) + .key('-', AllItemTags.VALVE_HANDLES.tag) + .addCriterion("has_valve", RegistrateRecipeProvider.hasItem(AllItemTags.VALVE_HANDLES.tag)) + .build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_valve_handle"))) + .register(); } } diff --git a/src/main/java/com/simibubi/create/AllColorHandlers.java b/src/main/java/com/simibubi/create/AllColorHandlers.java index f8d86596d..0b7672fa0 100644 --- a/src/main/java/com/simibubi/create/AllColorHandlers.java +++ b/src/main/java/com/simibubi/create/AllColorHandlers.java @@ -3,46 +3,38 @@ package com.simibubi.create; import java.util.HashMap; import java.util.Map; -import com.simibubi.create.foundation.block.IBlockVertexColor; -import com.simibubi.create.foundation.block.render.ColoredVertexModel; - import net.minecraft.block.Block; -import net.minecraft.block.BlockState; import net.minecraft.block.RedstoneWireBlock; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.color.BlockColors; import net.minecraft.client.renderer.color.IBlockColor; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.client.renderer.color.ItemColors; -import net.minecraft.item.ItemStack; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.util.IItemProvider; -import net.minecraft.util.math.BlockPos; import net.minecraft.world.GrassColors; -import net.minecraft.world.IBlockDisplayReader; import net.minecraft.world.biome.BiomeColors; +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; public class AllColorHandlers { - private final Map coloredVertexBlocks = new HashMap<>(); private final Map coloredBlocks = new HashMap<>(); private final Map coloredItems = new HashMap<>(); // public static IBlockColor getGrassyBlock() { - return new BlockColor( - (state, world, pos, layer) -> pos != null && world != null ? BiomeColors.getGrassColor(world, pos) - : GrassColors.get(0.5D, 1.0D)); + return (state, world, pos, layer) -> pos != null && world != null ? BiomeColors.getGrassColor(world, pos) + : GrassColors.get(0.5D, 1.0D); } public static IItemColor getGrassyItem() { - return new ItemColor((stack, layer) -> GrassColors.get(0.5D, 1.0D)); + return (stack, layer) -> GrassColors.get(0.5D, 1.0D); } public static IBlockColor getRedstonePower() { - return new BlockColor((state, world, pos, layer) -> RedstoneWireBlock - .getWireColor(pos != null && world != null ? state.get(BlockStateProperties.POWER_0_15) : 0)); + return (state, world, pos, layer) -> RedstoneWireBlock + .getWireColor(pos != null && world != null ? state.get(BlockStateProperties.POWER_0_15) : 0); } // @@ -51,66 +43,22 @@ public class AllColorHandlers { coloredBlocks.put(block, color); } - public void register(Block block, IBlockVertexColor color) { - coloredVertexBlocks.put(block, color); - } - public void register(IItemProvider item, IItemColor color) { coloredItems.put(item, color); } - public void init() { - BlockColors blockColors = Minecraft.getInstance() - .getBlockColors(); - ItemColors itemColors = Minecraft.getInstance() - .getItemColors(); - - coloredBlocks.forEach((block, color) -> blockColors.register(color, block)); - coloredItems.forEach((item, color) -> itemColors.register(color, item)); - coloredVertexBlocks.forEach((block, color) -> CreateClient.getCustomBlockModels() - .register(() -> block, model -> new ColoredVertexModel(model, color))); - } - // - private static class ItemColor implements IItemColor { - - private Function function; - - @FunctionalInterface - interface Function { - int apply(ItemStack stack, int layer); - } - - public ItemColor(Function function) { - this.function = function; - } - - @Override - public int getColor(ItemStack stack, int layer) { - return function.apply(stack, layer); - } - + @SubscribeEvent + public void registerBlockColors(ColorHandlerEvent.Block event) { + BlockColors blockColors = event.getBlockColors(); + coloredBlocks.forEach((block, color) -> blockColors.register(color, block)); } - private static class BlockColor implements IBlockColor { - - private Function function; - - @FunctionalInterface - interface Function { - int apply(BlockState state, IBlockDisplayReader world, BlockPos pos, int layer); - } - - public BlockColor(Function function) { - this.function = function; - } - - @Override - public int getColor(BlockState state, IBlockDisplayReader world, BlockPos pos, int layer) { - return function.apply(state, world, pos, layer); - } - + @SubscribeEvent + public void registerItemColors(ColorHandlerEvent.Item event) { + ItemColors itemColors = event.getItemColors(); + coloredItems.forEach((item, color) -> itemColors.register(color, item)); } } diff --git a/src/main/java/com/simibubi/create/AllContainerTypes.java b/src/main/java/com/simibubi/create/AllContainerTypes.java index f7ea37a0c..a9b2cb923 100644 --- a/src/main/java/com/simibubi/create/AllContainerTypes.java +++ b/src/main/java/com/simibubi/create/AllContainerTypes.java @@ -10,61 +10,37 @@ import com.simibubi.create.content.schematics.block.SchematicTableContainer; import com.simibubi.create.content.schematics.block.SchematicTableScreen; import com.simibubi.create.content.schematics.block.SchematicannonContainer; import com.simibubi.create.content.schematics.block.SchematicannonScreen; -import com.simibubi.create.foundation.utility.Lang; +import com.tterrag.registrate.builders.ContainerBuilder.ForgeContainerFactory; +import com.tterrag.registrate.builders.ContainerBuilder.ScreenFactory; +import com.tterrag.registrate.util.entry.ContainerEntry; +import com.tterrag.registrate.util.nullness.NonNullSupplier; import net.minecraft.client.gui.IHasContainer; -import net.minecraft.client.gui.ScreenManager; -import net.minecraft.client.gui.ScreenManager.IScreenFactory; import net.minecraft.client.gui.screen.Screen; import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.ContainerType; -import net.minecraft.inventory.container.ContainerType.IFactory; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.fml.network.IContainerFactory; -public enum AllContainerTypes { +public class AllContainerTypes { - SCHEMATIC_TABLE(SchematicTableContainer::new), - SCHEMATICANNON(SchematicannonContainer::new), - FLEXCRATE(AdjustableCrateContainer::new), - FILTER(FilterContainer::new), - ATTRIBUTE_FILTER(AttributeFilterContainer::new), + public static final ContainerEntry SCHEMATIC_TABLE = + register("schematic_table", SchematicTableContainer::new, () -> SchematicTableScreen::new); - ; + public static final ContainerEntry SCHEMATICANNON = + register("schematicannon", SchematicannonContainer::new, () -> SchematicannonScreen::new); - public ContainerType type; - private IFactory factory; + public static final ContainerEntry FLEXCRATE = + register("flexcrate", AdjustableCrateContainer::new, () -> AdjustableCrateScreen::new); - private AllContainerTypes(IContainerFactory factory) { - this.factory = factory; + public static final ContainerEntry FILTER = + register("filter", FilterContainer::new, () -> FilterScreen::new); + + public static final ContainerEntry ATTRIBUTE_FILTER = + register("attribute_filter", AttributeFilterContainer::new, () -> AttributeFilterScreen::new); + + private static > ContainerEntry register(String name, ForgeContainerFactory factory, NonNullSupplier> screenFactory) { + return Create.registrate().container(name, factory, screenFactory).register(); } - public static void register(RegistryEvent.Register> event) { - for (AllContainerTypes container : values()) { - container.type = new ContainerType<>(container.factory) - .setRegistryName(new ResourceLocation(Create.ID, Lang.asId(container.name()))); - event.getRegistry() - .register(container.type); - } - } - - @OnlyIn(Dist.CLIENT) - public static void registerScreenFactories() { - bind(SCHEMATIC_TABLE, SchematicTableScreen::new); - bind(SCHEMATICANNON, SchematicannonScreen::new); - bind(FLEXCRATE, AdjustableCrateScreen::new); - bind(FILTER, FilterScreen::new); - bind(ATTRIBUTE_FILTER, AttributeFilterScreen::new); - } - - @OnlyIn(Dist.CLIENT) - @SuppressWarnings("unchecked") - private static > void bind(AllContainerTypes c, - IScreenFactory factory) { - ScreenManager.registerFactory((ContainerType) c.type, factory); + public static void register() { } } diff --git a/src/main/java/com/simibubi/create/AllEntityTypes.java b/src/main/java/com/simibubi/create/AllEntityTypes.java index 32afec7fa..44e39b2a7 100644 --- a/src/main/java/com/simibubi/create/AllEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllEntityTypes.java @@ -10,65 +10,63 @@ import com.simibubi.create.content.contraptions.components.structureMovement.gan import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity; import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueRenderer; import com.simibubi.create.foundation.utility.Lang; -import com.tterrag.registrate.util.entry.RegistryEntry; +import com.tterrag.registrate.util.entry.EntityEntry; import com.tterrag.registrate.util.nullness.NonNullConsumer; +import com.tterrag.registrate.util.nullness.NonNullSupplier; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityClassification; import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType.IFactory; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.client.registry.IRenderFactory; public class AllEntityTypes { - public static final RegistryEntry> ORIENTED_CONTRAPTION = - contraption("contraption", OrientedContraptionEntity::new, 5, 3, true); - public static final RegistryEntry> CONTROLLED_CONTRAPTION = - contraption("stationary_contraption", ControlledContraptionEntity::new, 20, 40, false); - public static final RegistryEntry> GANTRY_CONTRAPTION = - contraption("gantry_contraption", GantryContraptionEntity::new, 10, 40, false); + public static final EntityEntry ORIENTED_CONTRAPTION = + contraption("contraption", OrientedContraptionEntity::new, () -> OrientedContraptionEntityRenderer::new, + 5, 3, true); + public static final EntityEntry CONTROLLED_CONTRAPTION = + contraption("stationary_contraption", ControlledContraptionEntity::new, () -> ContraptionEntityRenderer::new, + 20, 40, false); + public static final EntityEntry GANTRY_CONTRAPTION = + contraption("gantry_contraption", GantryContraptionEntity::new, () -> ContraptionEntityRenderer::new, + 10, 40, false); - public static final RegistryEntry> SUPER_GLUE = register("super_glue", - SuperGlueEntity::new, EntityClassification.MISC, 10, Integer.MAX_VALUE, false, true, SuperGlueEntity::build); - public static final RegistryEntry> SEAT = register("seat", SeatEntity::new, - EntityClassification.MISC, 0, Integer.MAX_VALUE, false, true, SeatEntity::build); + public static final EntityEntry SUPER_GLUE = + register("super_glue", SuperGlueEntity::new, () -> SuperGlueRenderer::new, + EntityClassification.MISC, 10, Integer.MAX_VALUE, false, true, SuperGlueEntity::build); + public static final EntityEntry SEAT = + register("seat", SeatEntity::new, () -> SeatEntity.Render::new, + EntityClassification.MISC, 0, Integer.MAX_VALUE, false, true, SeatEntity::build); // - public static void register() {} - - private static RegistryEntry> contraption(String name, IFactory factory, - int range, int updateFrequency, boolean sendVelocity) { - return register(name, factory, EntityClassification.MISC, range, updateFrequency, sendVelocity, true, - AbstractContraptionEntity::build); + private static EntityEntry contraption(String name, IFactory factory, + NonNullSupplier> renderer, int range, int updateFrequency, + boolean sendVelocity) { + return register(name, factory, renderer, EntityClassification.MISC, range, updateFrequency, + sendVelocity, true, AbstractContraptionEntity::build); } - private static RegistryEntry> register(String name, IFactory factory, - EntityClassification group, int range, int updateFrequency, boolean sendVelocity, boolean immuneToFire, - NonNullConsumer> propertyBuilder) { + private static EntityEntry register(String name, IFactory factory, + NonNullSupplier> renderer, EntityClassification group, int range, + int updateFrequency, boolean sendVelocity, boolean immuneToFire, + NonNullConsumer> propertyBuilder) { String id = Lang.asId(name); return Create.registrate() - .entity(id, factory, group) - .properties(b -> b.setTrackingRange(range) - .setUpdateInterval(updateFrequency) - .setShouldReceiveVelocityUpdates(sendVelocity)) - .properties(propertyBuilder) - .properties(b -> { - if (immuneToFire) - b.immuneToFire(); - }) - .register(); + .entity(id, factory, group) + .properties(b -> b.setTrackingRange(range) + .setUpdateInterval(updateFrequency) + .setShouldReceiveVelocityUpdates(sendVelocity)) + .properties(propertyBuilder) + .properties(b -> { + if (immuneToFire) + b.immuneToFire(); + }) + .renderer(renderer) + .register(); } - @OnlyIn(value = Dist.CLIENT) - public static void registerRenderers() { - RenderingRegistry.registerEntityRenderingHandler(CONTROLLED_CONTRAPTION.get(), ContraptionEntityRenderer::new); - RenderingRegistry.registerEntityRenderingHandler(ORIENTED_CONTRAPTION.get(), - OrientedContraptionEntityRenderer::new); - RenderingRegistry.registerEntityRenderingHandler(GANTRY_CONTRAPTION.get(), ContraptionEntityRenderer::new); - RenderingRegistry.registerEntityRenderingHandler(SUPER_GLUE.get(), SuperGlueRenderer::new); - RenderingRegistry.registerEntityRenderingHandler(SEAT.get(), SeatEntity.Render::new); + public static void register() { } } diff --git a/src/main/java/com/simibubi/create/AllFluids.java b/src/main/java/com/simibubi/create/AllFluids.java index 5a7b92355..854aab1f1 100644 --- a/src/main/java/com/simibubi/create/AllFluids.java +++ b/src/main/java/com/simibubi/create/AllFluids.java @@ -7,7 +7,7 @@ import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid; import com.simibubi.create.content.contraptions.fluids.potion.PotionFluid.PotionFluidAttributes; import com.simibubi.create.content.palettes.AllPaletteBlocks; import com.simibubi.create.foundation.data.CreateRegistrate; -import com.tterrag.registrate.util.entry.RegistryEntry; +import com.tterrag.registrate.util.entry.FluidEntry; import net.minecraft.block.BlockState; import net.minecraft.client.renderer.RenderType; @@ -25,47 +25,47 @@ public class AllFluids { private static final CreateRegistrate REGISTRATE = Create.registrate(); - public static RegistryEntry POTION = - REGISTRATE.virtualFluid("potion", PotionFluidAttributes::new, PotionFluid::new) - .lang(f -> "fluid.create.potion", "Potion") + public static FluidEntry POTION = + REGISTRATE.virtualFluid("potion", PotionFluidAttributes::new, PotionFluid::new) + .lang(f -> "fluid.create.potion", "Potion") + .register(); + + public static FluidEntry TEA = REGISTRATE.virtualFluid("tea") + .lang(f -> "fluid.create.tea", "Builder's Tea") + .tag(AllTags.forgeFluidTag("tea")) .register(); - public static RegistryEntry TEA = REGISTRATE.virtualFluid("tea") - .lang(f -> "fluid.create.tea", "Builder's Tea") - .tag(AllTags.forgeFluidTag("tea")) - .register(); - - public static RegistryEntry MILK = REGISTRATE.virtualFluid("milk") - .lang(f -> "fluid.create.milk", "Milk") - .tag(AllTags.forgeFluidTag("milk")) - .register(); - - public static RegistryEntry HONEY = - REGISTRATE.standardFluid("honey", NoColorFluidAttributes::new) - .lang(f -> "fluid.create.honey", "Honey") - .attributes(b -> b.viscosity(500) - .density(1400)) - .properties(p -> p.levelDecreasePerBlock(2) - .tickRate(25) - .slopeFindDistance(3) - .explosionResistance(100f)) - .tag(AllTags.forgeFluidTag("honey")) - .bucket() - .properties(p -> p.maxStackSize(1)) - .build() + public static FluidEntry MILK = REGISTRATE.virtualFluid("milk") + .lang(f -> "fluid.create.milk", "Milk") + .tag(AllTags.forgeFluidTag("milk")) .register(); - public static RegistryEntry CHOCOLATE = - REGISTRATE.standardFluid("chocolate", NoColorFluidAttributes::new) - .lang(f -> "fluid.create.chocolate", "Chocolate") - .tag(AllTags.forgeFluidTag("chocolate")) - .attributes(b -> b.viscosity(500) - .density(1400)) - .properties(p -> p.levelDecreasePerBlock(2) - .tickRate(25) - .slopeFindDistance(3) - .explosionResistance(100f)) - .bucket() + public static FluidEntry HONEY = + REGISTRATE.standardFluid("honey", NoColorFluidAttributes::new) + .lang(f -> "fluid.create.honey", "Honey") + .attributes(b -> b.viscosity(500) + .density(1400)) + .properties(p -> p.levelDecreasePerBlock(2) + .tickRate(25) + .slopeFindDistance(3) + .explosionResistance(100f)) + .tag(AllTags.forgeFluidTag("honey")) + .bucket() + .properties(p -> p.maxStackSize(1)) + .build() + .register(); + + public static FluidEntry CHOCOLATE = + REGISTRATE.standardFluid("chocolate", NoColorFluidAttributes::new) + .lang(f -> "fluid.create.chocolate", "Chocolate") + .tag(AllTags.forgeFluidTag("chocolate")) + .attributes(b -> b.viscosity(500) + .density(1400)) + .properties(p -> p.levelDecreasePerBlock(2) + .tickRate(25) + .slopeFindDistance(3) + .explosionResistance(100f)) + .bucket() .properties(p -> p.maxStackSize(1)) .build() .register(); @@ -78,7 +78,7 @@ public class AllFluids { public static void assignRenderLayers() {} @OnlyIn(Dist.CLIENT) - private static void makeTranslucent(RegistryEntry entry) { + private static void makeTranslucent(FluidEntry entry) { ForgeFlowingFluid fluid = entry.get(); RenderTypeLookup.setRenderLayer(fluid, RenderType.getTranslucent()); RenderTypeLookup.setRenderLayer(fluid.getStillFluid(), RenderType.getTranslucent()); diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 2d13ad744..ebff77230 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -1,10 +1,10 @@ package com.simibubi.create; -import static com.simibubi.create.AllTags.forgeItemTag; import static com.simibubi.create.AllTags.AllItemTags.CREATE_INGOTS; import static com.simibubi.create.AllTags.AllItemTags.CRUSHED_ORES; import static com.simibubi.create.AllTags.AllItemTags.NUGGETS; import static com.simibubi.create.AllTags.AllItemTags.PLATES; +import static com.simibubi.create.AllTags.forgeItemTag; import static com.simibubi.create.content.AllSections.CURIOSITIES; import static com.simibubi.create.content.AllSections.KINETICS; import static com.simibubi.create.content.AllSections.LOGISTICS; @@ -61,7 +61,7 @@ import net.minecraft.util.ResourceLocation; public class AllItems { private static final CreateRegistrate REGISTRATE = Create.registrate() - .itemGroup(() -> Create.baseCreativeTab); + .itemGroup(() -> Create.BASE_CREATIVE_TAB); // Schematics diff --git a/src/main/java/com/simibubi/create/AllKeys.java b/src/main/java/com/simibubi/create/AllKeys.java index d997811b2..3877f1026 100644 --- a/src/main/java/com/simibubi/create/AllKeys.java +++ b/src/main/java/com/simibubi/create/AllKeys.java @@ -9,7 +9,8 @@ import net.minecraftforge.fml.client.registry.ClientRegistry; public enum AllKeys { - TOOL_MENU("toolmenu", GLFW.GLFW_KEY_LEFT_ALT), ACTIVATE_TOOL("", GLFW.GLFW_KEY_LEFT_CONTROL), + TOOL_MENU("toolmenu", GLFW.GLFW_KEY_LEFT_ALT), + ACTIVATE_TOOL("", GLFW.GLFW_KEY_LEFT_CONTROL), ; diff --git a/src/main/java/com/simibubi/create/AllMovementBehaviours.java b/src/main/java/com/simibubi/create/AllMovementBehaviours.java index 0d306ddaf..ece2e1f65 100644 --- a/src/main/java/com/simibubi/create/AllMovementBehaviours.java +++ b/src/main/java/com/simibubi/create/AllMovementBehaviours.java @@ -17,12 +17,12 @@ import net.minecraft.block.Blocks; import net.minecraft.util.ResourceLocation; public class AllMovementBehaviours { - private static final HashMap movementBehaviours = new HashMap<>(); + private static final HashMap MOVEMENT_BEHAVIOURS = new HashMap<>(); public static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) { - if (movementBehaviours.containsKey(resourceLocation)) - Create.logger.warn("Movement behaviour for " + resourceLocation.toString() + " was overridden"); - movementBehaviours.put(resourceLocation, movementBehaviour); + if (MOVEMENT_BEHAVIOURS.containsKey(resourceLocation)) + Create.LOGGER.warn("Movement behaviour for " + resourceLocation.toString() + " was overridden"); + MOVEMENT_BEHAVIOURS.put(resourceLocation, movementBehaviour); } public static void addMovementBehaviour(Block block, MovementBehaviour movementBehaviour) { @@ -31,7 +31,7 @@ public class AllMovementBehaviours { @Nullable public static MovementBehaviour of(ResourceLocation resourceLocation) { - return movementBehaviours.getOrDefault(resourceLocation, null); + return MOVEMENT_BEHAVIOURS.getOrDefault(resourceLocation, null); } @Nullable @@ -45,7 +45,7 @@ public class AllMovementBehaviours { } public static boolean contains(Block block) { - return movementBehaviours.containsKey(block.getRegistryName()); + return MOVEMENT_BEHAVIOURS.containsKey(block.getRegistryName()); } public static NonNullConsumer addMovementBehaviour( diff --git a/src/main/java/com/simibubi/create/AllSpecialTextures.java b/src/main/java/com/simibubi/create/AllSpecialTextures.java index d3b95fe85..786dde9be 100644 --- a/src/main/java/com/simibubi/create/AllSpecialTextures.java +++ b/src/main/java/com/simibubi/create/AllSpecialTextures.java @@ -2,10 +2,7 @@ package com.simibubi.create; import net.minecraft.client.Minecraft; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -@EventBusSubscriber(value = Dist.CLIENT) public enum AllSpecialTextures { BLANK("blank.png"), diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index 231973559..541be85b3 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -31,7 +31,7 @@ import net.minecraftforge.fml.ModList; public class AllTags { private static final CreateRegistrate REGISTRATE = Create.registrate() - .itemGroup(() -> Create.baseCreativeTab); + .itemGroup(() -> Create.BASE_CREATIVE_TAB); public static NonNullFunction, ItemBuilder>> tagBlockAndItem( String tagName) { diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 7eda87047..cf360ba92 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -159,7 +159,6 @@ import com.simibubi.create.content.schematics.block.SchematicannonInstance; import com.simibubi.create.content.schematics.block.SchematicannonRenderer; import com.simibubi.create.content.schematics.block.SchematicannonTileEntity; import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; -import com.tterrag.registrate.util.entry.BlockEntry; import com.tterrag.registrate.util.entry.TileEntityEntry; public class AllTileEntities { @@ -248,10 +247,10 @@ public class AllTileEntities { .register(); public static final TileEntityEntry HAND_CRANK = Create.registrate() - .tileEntity("hand_crank", HandCrankTileEntity::new) - .instance(() -> HandCrankInstance::new) - .validBlocks(AllBlocks.HAND_CRANK, AllBlocks.COPPER_VALVE_HANDLE) - .validBlocks(AllBlocks.DYED_VALVE_HANDLES.toArray(new BlockEntry[AllBlocks.DYED_VALVE_HANDLES.size()])) + .tileEntity("hand_crank", HandCrankTileEntity::new) + .instance(() -> HandCrankInstance::new) + .validBlocks(AllBlocks.HAND_CRANK, AllBlocks.COPPER_VALVE_HANDLE) + .validBlocks(AllBlocks.DYED_VALVE_HANDLES) .renderer(() -> HandCrankRenderer::new) .register(); diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index c62a11acb..48e0b047a 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -31,7 +31,6 @@ import com.simibubi.create.foundation.worldgen.AllWorldFeatures; import com.tterrag.registrate.util.NonNullLazyValue; import net.minecraft.data.DataGenerator; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.ItemGroup; import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.particles.ParticleType; @@ -57,52 +56,52 @@ public class Create { public static final String NAME = "Create"; public static final String VERSION = "0.3.1c"; - public static Logger logger = LogManager.getLogger(); - public static ItemGroup baseCreativeTab = new CreateItemGroup(); - public static ItemGroup palettesCreativeTab = new PalettesItemGroup(); + public static final Logger LOGGER = LogManager.getLogger(); - public static Gson GSON = new GsonBuilder().setPrettyPrinting() - .disableHtmlEscaping() - .create(); + public static final Gson GSON = new GsonBuilder().setPrettyPrinting() + .disableHtmlEscaping() + .create(); - public static ServerSchematicLoader schematicReceiver; - public static RedstoneLinkNetworkHandler redstoneLinkNetworkHandler; - public static TorquePropagator torquePropagator; - public static ServerLagger lagger; - public static ChunkUtil chunkUtil; - public static Random random; + public static final ItemGroup BASE_CREATIVE_TAB = new CreateItemGroup(); + public static final ItemGroup PALETTES_CREATIVE_TAB = new PalettesItemGroup(); - private static final NonNullLazyValue registrate = CreateRegistrate.lazy(ID); + public static final ServerSchematicLoader SCHEMATIC_RECEIVER = new ServerSchematicLoader(); + public static final RedstoneLinkNetworkHandler REDSTONE_LINK_NETWORK_HANDLER = new RedstoneLinkNetworkHandler(); + public static final TorquePropagator TORQUE_PROPAGATOR = new TorquePropagator(); + public static final ServerLagger LAGGER = new ServerLagger(); + public static final ChunkUtil CHUNK_UTIL = new ChunkUtil(); + public static final Random RANDOM = new Random(); + + private static final NonNullLazyValue REGISTRATE = CreateRegistrate.lazy(ID); public Create() { - IEventBus modEventBus = FMLJavaModLoadingContext.get() - .getModEventBus(); - AllSoundEvents.prepare(); AllBlocks.register(); AllItems.register(); AllFluids.register(); AllTags.register(); AllPaletteBlocks.register(); + AllContainerTypes.register(); AllEntityTypes.register(); AllTileEntities.register(); AllMovementBehaviours.register(); AllWorldFeatures.register(); + AllConfigs.register(); + + IEventBus modEventBus = FMLJavaModLoadingContext.get() + .getModEventBus(); + IEventBus forgeEventBus = MinecraftForge.EVENT_BUS; modEventBus.addListener(Create::init); - MinecraftForge.EVENT_BUS.addListener(EventPriority.HIGH, Create::onBiomeLoad); modEventBus.addGenericListener(Feature.class, AllWorldFeatures::registerOreFeatures); modEventBus.addGenericListener(Placement.class, AllWorldFeatures::registerDecoratorFeatures); modEventBus.addGenericListener(IRecipeSerializer.class, AllRecipeTypes::register); - modEventBus.addGenericListener(ContainerType.class, AllContainerTypes::register); modEventBus.addGenericListener(ParticleType.class, AllParticleTypes::register); modEventBus.addGenericListener(SoundEvent.class, AllSoundEvents::register); modEventBus.addListener(AllConfigs::onLoad); modEventBus.addListener(AllConfigs::onReload); modEventBus.addListener(EventPriority.LOWEST, this::gatherData); - - AllConfigs.register(); - random = new Random(); + forgeEventBus.addListener(EventPriority.HIGH, Create::onBiomeLoad); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateClient.addClientListeners(modEventBus)); } @@ -110,14 +109,9 @@ public class Create { public static void init(final FMLCommonSetupEvent event) { CapabilityMinecartController.register(); SchematicInstances.register(); - schematicReceiver = new ServerSchematicLoader(); - redstoneLinkNetworkHandler = new RedstoneLinkNetworkHandler(); - torquePropagator = new TorquePropagator(); - lagger = new ServerLagger(); - chunkUtil = new ChunkUtil(); - chunkUtil.init(); - MinecraftForge.EVENT_BUS.register(chunkUtil); + CHUNK_UTIL.init(); + MinecraftForge.EVENT_BUS.register(CHUNK_UTIL); AllPackets.registerPackets(); AllTriggers.register(); @@ -128,18 +122,6 @@ public class Create { }); } - public static void onBiomeLoad(BiomeLoadingEvent event) { - AllWorldFeatures.reload(event); - } - - public static CreateRegistrate registrate() { - return registrate.get(); - } - - public static ResourceLocation asResource(String path) { - return new ResourceLocation(ID, path); - } - public void gatherData(GatherDataEvent event) { DataGenerator gen = event.getGenerator(); gen.addProvider(new AllAdvancements(gen)); @@ -150,4 +132,16 @@ public class Create { ProcessingRecipeGen.registerAll(gen); } + public static void onBiomeLoad(BiomeLoadingEvent event) { + AllWorldFeatures.reload(event); + } + + public static CreateRegistrate registrate() { + return REGISTRATE.get(); + } + + public static ResourceLocation asResource(String path) { + return new ResourceLocation(ID, path); + } + } diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 6feabe8a7..70086497f 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -62,12 +62,12 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; public class CreateClient { - public static ClientSchematicLoader schematicSender; - public static SchematicHandler schematicHandler; - public static SchematicAndQuillHandler schematicAndQuillHandler; - public static SuperByteBufferCache bufferCache; - public static final Outliner outliner = new Outliner(); - public static GhostBlocks ghostBlocks; + public static final ClientSchematicLoader SCHEMATIC_SENDER = new ClientSchematicLoader(); + public static final SchematicHandler SCHEMATIC_HANDLER = new SchematicHandler(); + public static final SchematicAndQuillHandler SCHEMATIC_AND_QUILL_HANDLER = new SchematicAndQuillHandler(); + public static final SuperByteBufferCache BUFFER_CACHE = new SuperByteBufferCache(); + public static final Outliner OUTLINER = new Outliner(); + public static final GhostBlocks GHOST_BLOCKS = new GhostBlocks(); private static CustomBlockModels customBlockModels; private static CustomItemModels customItemModels; @@ -77,9 +77,10 @@ public class CreateClient { public static void addClientListeners(IEventBus modEventBus) { modEventBus.addListener(CreateClient::clientInit); - modEventBus.addListener(CreateClient::onModelBake); - modEventBus.addListener(CreateClient::onModelRegistry); + modEventBus.register(getColorHandler()); modEventBus.addListener(CreateClient::onTextureStitch); + modEventBus.addListener(CreateClient::onModelRegistry); + modEventBus.addListener(CreateClient::onModelBake); modEventBus.addListener(AllParticleTypes::registerFactories); modEventBus.addListener(ClientEvents::loadCompleted); @@ -91,35 +92,24 @@ public class CreateClient { public static void clientInit(FMLClientSetupEvent event) { AllMaterialSpecs.init(); - schematicSender = new ClientSchematicLoader(); - schematicHandler = new SchematicHandler(); - schematicAndQuillHandler = new SchematicAndQuillHandler(); - - bufferCache = new SuperByteBufferCache(); - bufferCache.registerCompartment(KineticTileEntityRenderer.KINETIC_TILE); - bufferCache.registerCompartment(ContraptionRenderDispatcher.CONTRAPTION, 20); - bufferCache.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20); - - ghostBlocks = new GhostBlocks(); + BUFFER_CACHE.registerCompartment(KineticTileEntityRenderer.KINETIC_TILE); + BUFFER_CACHE.registerCompartment(ContraptionRenderDispatcher.CONTRAPTION, 20); + BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20); AllKeys.register(); - AllContainerTypes.registerScreenFactories(); - // AllTileEntities.registerRenderers(); - AllEntityTypes.registerRenderers(); - getColorHandler().init(); - AllFluids.assignRenderLayers(); + // AllFluids.assignRenderLayers(); + AllBlockPartials.clientInit(); + PonderIndex.register(); PonderIndex.registerTags(); UIRenderHelper.init(); IResourceManager resourceManager = Minecraft.getInstance() - .getResourceManager(); + .getResourceManager(); if (resourceManager instanceof IReloadableResourceManager) ((IReloadableResourceManager) resourceManager).addReloadListener(new ResourceReloadHandler()); - AllBlockPartials.clientInit(); - event.enqueueWork(() -> { CopperBacktankArmorLayer.register(); }); @@ -127,11 +117,19 @@ public class CreateClient { public static void onTextureStitch(TextureStitchEvent.Pre event) { if (!event.getMap() - .getId() - .equals(PlayerContainer.BLOCK_ATLAS_TEXTURE)) + .getId() + .equals(PlayerContainer.BLOCK_ATLAS_TEXTURE)) return; SpriteShifter.getAllTargetSprites() - .forEach(event::addSprite); + .forEach(event::addSprite); + } + + public static void onModelRegistry(ModelRegistryEvent event) { + PartialModel.onModelRegistry(event); + + getCustomRenderedItems().foreach((item, modelFunc) -> modelFunc.apply(null) + .getModelLocations() + .forEach(ModelLoader::addSpecialModel)); } public static void onModelBake(ModelBakeEvent event) { @@ -139,23 +137,15 @@ public class CreateClient { PartialModel.onModelBake(event); getCustomBlockModels() - .foreach((block, modelFunc) -> swapModels(modelRegistry, getAllBlockStateModelLocations(block), modelFunc)); + .foreach((block, modelFunc) -> swapModels(modelRegistry, getAllBlockStateModelLocations(block), modelFunc)); getCustomItemModels() - .foreach((item, modelFunc) -> swapModels(modelRegistry, getItemModelLocation(item), modelFunc)); + .foreach((item, modelFunc) -> swapModels(modelRegistry, getItemModelLocation(item), modelFunc)); getCustomRenderedItems().foreach((item, modelFunc) -> { swapModels(modelRegistry, getItemModelLocation(item), m -> modelFunc.apply(m) .loadPartials(event)); }); } - public static void onModelRegistry(ModelRegistryEvent event) { - PartialModel.onModelRegistry(event); - - getCustomRenderedItems().foreach((item, modelFunc) -> modelFunc.apply(null) - .getModelLocations() - .forEach(ModelLoader::addSpecialModel)); - } - protected static ModelResourceLocation getItemModelLocation(Item item) { return new ModelResourceLocation(item.getRegistryName(), "inventory"); } @@ -221,7 +211,7 @@ public class CreateClient { } public static void invalidateRenderers(@Nullable IWorld world) { - bufferCache.invalidate(); + BUFFER_CACHE.invalidate(); if (world != null) { Backend.tileRenderer.get(world) diff --git a/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java b/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java index f62c174bc..6876dd717 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java +++ b/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java @@ -28,11 +28,11 @@ public class KineticDebugger { if (!isActive()) { if (KineticTileEntityRenderer.rainbowMode) { KineticTileEntityRenderer.rainbowMode = false; - CreateClient.bufferCache.invalidate(); - } + CreateClient.BUFFER_CACHE.invalidate(); + } return; } - + KineticTileEntity te = getSelectedTE(); if (te == null) return; @@ -44,18 +44,18 @@ public class KineticDebugger { .getRenderShape(world, toOutline); if (te.getTheoreticalSpeed() != 0 && !shape.isEmpty()) - CreateClient.outliner.chaseAABB("kineticSource", shape.getBoundingBox() - .offset(toOutline)) - .lineWidth(1 / 16f) - .colored(te.hasSource() ? ColorHelper.colorFromLong(te.network) : 0xffcc00); + CreateClient.OUTLINER.chaseAABB("kineticSource", shape.getBoundingBox() + .offset(toOutline)) + .lineWidth(1 / 16f) + .colored(te.hasSource() ? ColorHelper.colorFromLong(te.network) : 0xffcc00); if (state.getBlock() instanceof IRotate) { Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state); Vector3d vec = Vector3d.of(Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis) - .getDirectionVec()); + .getDirectionVec()); Vector3d center = VecHelper.getCenterOf(te.getPos()); - CreateClient.outliner.showLine("rotationAxis", center.add(vec), center.subtract(vec)) - .lineWidth(1 / 16f); + CreateClient.OUTLINER.showLine("rotationAxis", center.add(vec), center.subtract(vec)) + .lineWidth(1 / 16f); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/TorquePropagator.java b/src/main/java/com/simibubi/create/content/contraptions/TorquePropagator.java index 6dfae6185..3d169a6ef 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/TorquePropagator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/TorquePropagator.java @@ -15,12 +15,12 @@ public class TorquePropagator { public void onLoadWorld(IWorld world) { networks.put(world, new HashMap<>()); - Create.logger.debug("Prepared Kinetic Network Space for " + WorldHelper.getDimensionID(world)); + Create.LOGGER.debug("Prepared Kinetic Network Space for " + WorldHelper.getDimensionID(world)); } public void onUnloadWorld(IWorld world) { networks.remove(world); - Create.logger.debug("Removed Kinetic Network Space for " + WorldHelper.getDimensionID(world)); + Create.LOGGER.debug("Removed Kinetic Network Space for " + WorldHelper.getDimensionID(world)); } public KineticNetwork getOrCreateNetworkFor(KineticTileEntity te) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java index a3e7dad01..9fbc99185 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java @@ -329,7 +329,7 @@ public abstract class KineticTileEntity extends SmartTileEntity } public KineticNetwork getOrCreateNetwork() { - return Create.torquePropagator.getOrCreateNetworkFor(this); + return Create.TORQUE_PROPAGATOR.getOrCreateNetworkFor(this); } public boolean hasNetwork() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntityRenderer.java index 707679a35..1df76d71b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntityRenderer.java @@ -48,7 +48,7 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer player.inventory.placeItemBackInInventory(world, item)); + .forEach(item -> player.inventory.placeItemBackInInventory(world, item)); blockstate.spawnAdditionalDrops(world, pos, prevHeldItem); return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java index 7e12bcdb9..edade4430 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java @@ -105,31 +105,31 @@ public class DeployerMovementBehaviour extends MovementBehaviour { if (schematicWorld == null) return; if (!schematicWorld.getBounds() - .isVecInside(pos.subtract(schematicWorld.anchor))) + .isVecInside(pos.subtract(schematicWorld.anchor))) return; BlockState blockState = schematicWorld.getBlockState(pos); - ItemRequirement requirement = ItemRequirement.of(blockState); + ItemRequirement requirement = ItemRequirement.of(blockState, schematicWorld.getTileEntity(pos)); if (requirement.isInvalid() || requirement.isEmpty()) return; if (AllBlocks.BELT.has(blockState)) return; - List requiredItems = requirement.getRequiredItems(); - ItemStack firstRequired = requiredItems.isEmpty() ? ItemStack.EMPTY : requiredItems.get(0); + List requiredItems = requirement.getRequiredItems(); + ItemStack firstRequired = requiredItems.isEmpty() ? ItemStack.EMPTY : requiredItems.get(0).item; if (!context.contraption.hasUniversalCreativeCrate) { IItemHandler iItemHandler = context.contraption.inventory; - for (ItemStack required : requiredItems) { + for (ItemRequirement.StackRequirement required : requiredItems) { int amountFound = ItemHelper - .extract(iItemHandler, s -> ItemRequirement.validate(required, s), ExtractionCountMode.UPTO, - required.getCount(), true) - .getCount(); - if (amountFound < required.getCount()) + .extract(iItemHandler, s -> ItemRequirement.validate(required.item, s), ExtractionCountMode.UPTO, + required.item.getCount(), true) + .getCount(); + if (amountFound < required.item.getCount()) return; } - for (ItemStack required : requiredItems) - ItemHelper.extract(iItemHandler, s -> ItemRequirement.validate(required, s), ExtractionCountMode.UPTO, - required.getCount(), false); + for (ItemRequirement.StackRequirement required : requiredItems) + ItemHelper.extract(iItemHandler, s -> ItemRequirement.validate(required.item, s), ExtractionCountMode.UPTO, + required.item.getCount(), false); } CompoundNBT data = null; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java index 0440de076..3b4d2ba91 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java @@ -89,8 +89,7 @@ public class AirCurrent { protected void tickAffectedEntities(World world, Direction facing) { for (Iterator iterator = caughtEntities.iterator(); iterator.hasNext();) { Entity entity = iterator.next(); - if (!entity.isAlive() || !entity.getBoundingBox() - .intersects(bounds)) { + if (!entity.isAlive() || !entity.getBoundingBox().intersects(bounds) || isPlayerCreativeFlying(entity)) { iterator.remove(); continue; } @@ -389,4 +388,12 @@ public class AirCurrent { isClientPlayerInAirCurrent = false; } + public static boolean isPlayerCreativeFlying(Entity entity) { + if (entity instanceof PlayerEntity) { + PlayerEntity player = (PlayerEntity) entity; + return player.isCreative() && player.abilities.isFlying; + } + return false; + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java index 945e8498c..73066ab14 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java @@ -49,7 +49,7 @@ public class NozzleTileEntity extends SmartTileEntity { compound.putFloat("Range", range); compound.putBoolean("Pushing", pushing); } - + @Override protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { super.fromTag(state, compound, clientPacket); @@ -89,14 +89,13 @@ public class NozzleTileEntity extends SmartTileEntity { for (Iterator iterator = pushingEntities.iterator(); iterator.hasNext();) { Entity entity = iterator.next(); Vector3d diff = entity.getPositionVec() - .subtract(center); + .subtract(center); if (!(entity instanceof PlayerEntity) && world.isRemote) continue; double distance = diff.length(); - if (distance > range || entity.isSneaking() - || (entity instanceof PlayerEntity && ((PlayerEntity) entity).isCreative())) { + if (distance > range || entity.isSneaking() || AirCurrent.isPlayerCreativeFlying(entity)) { iterator.remove(); continue; } @@ -106,7 +105,7 @@ public class NozzleTileEntity extends SmartTileEntity { float factor = (entity instanceof ItemEntity) ? 1 / 128f : 1 / 32f; Vector3d pushVec = diff.normalize() - .scale((range - distance) * (pushing ? 1 : -1)); + .scale((range - distance) * (pushing ? 1 : -1)); entity.setMotion(entity.getMotion() .add(pushVec.scale(factor))); entity.fallDistance = 0; @@ -150,13 +149,11 @@ public class NozzleTileEntity extends SmartTileEntity { for (Entity entity : world.getEntitiesWithinAABB(Entity.class, bb)) { Vector3d diff = entity.getPositionVec() - .subtract(center); + .subtract(center); double distance = diff.length(); - if (distance > range || entity.isSneaking() - || (entity instanceof PlayerEntity && ((PlayerEntity) entity).isCreative())) { + if (distance > range || entity.isSneaking() || AirCurrent.isPlayerCreativeFlying(entity)) continue; - } boolean canSee = canSee(entity); if (!canSee) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneRenderer.java index 8d0217b77..7fb801ee7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneRenderer.java @@ -16,7 +16,7 @@ public class MillstoneRenderer extends KineticTileEntityRenderer { @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { - return CreateClient.bufferCache.renderPartial(AllBlockPartials.MILLSTONE_COG, te.getBlockState()); + return CreateClient.BUFFER_CACHE.renderPartial(AllBlockPartials.MILLSTONE_COG, te.getBlockState()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/BeltPressingCallbacks.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/BeltPressingCallbacks.java index 825d3a9ac..93f0d1cb4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/BeltPressingCallbacks.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/BeltPressingCallbacks.java @@ -62,7 +62,7 @@ public class BeltPressingCallbacks { boolean centered = BeltHelper.isItemUpright(stack); copy.stack = stack; copy.locked = true; - copy.angle = centered ? 180 : Create.random.nextInt(360); + copy.angle = centered ? 180 : Create.RANDOM.nextInt(360); return copy; }) .collect(Collectors.toList()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index e840bc3ae..1856e1eb1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -187,7 +187,7 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { AllSoundEvents.MECHANICAL_PRESS_ACTIVATION_ON_BELT.playOnServer(world, pos); else AllSoundEvents.MECHANICAL_PRESS_ACTIVATION.playOnServer(world, pos, .5f, .75f + (Math.abs(getSpeed()) / 1024f)); - + if (!world.isRemote) sendData(); } @@ -258,9 +258,9 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { for (ItemStack result : InWorldProcessing.applyRecipeOn(ItemHandlerHelper.copyStackWithSize(item, 1), recipe.get())) { ItemEntity created = - new ItemEntity(world, itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(), result); + new ItemEntity(world, itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(), result); created.setDefaultPickupDelay(); - created.setMotion(VecHelper.offsetRandomly(Vector3d.ZERO, Create.random, .05f)); + created.setMotion(VecHelper.offsetRandomly(Vector3d.ZERO, Create.RANDOM, .05f)); world.addEntity(created); } item.shrink(1); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java index bba81950a..b9303a69a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java @@ -145,7 +145,7 @@ public class SawRenderer extends SafeTileEntityRenderer { BlockState state = te.getBlockState(); if (state.get(FACING).getAxis().isHorizontal()) return PartialBufferer.getFacing(AllBlockPartials.SHAFT_HALF, state.rotate(te.getWorld(), te.getPos(), Rotation.CLOCKWISE_180)); - return CreateClient.bufferCache.renderBlockIn(KineticTileEntityRenderer.KINETIC_TILE, + return CreateClient.BUFFER_CACHE.renderBlockIn(KineticTileEntityRenderer.KINETIC_TILE, getRenderedBlockState(te)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java index 5c651529a..13f5229fa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java @@ -1,30 +1,5 @@ package com.simibubi.create.content.contraptions.components.structureMovement; -import java.io.IOException; -import java.util.IdentityHashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.UUID; - -import org.apache.commons.lang3.mutable.MutableInt; -import org.apache.commons.lang3.tuple.MutablePair; - -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.simibubi.create.AllMovementBehaviours; -import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.components.actors.SeatEntity; -import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity; -import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MountedContraption; -import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket; -import com.simibubi.create.foundation.collision.Matrix3d; -import com.simibubi.create.foundation.networking.AllPackets; -import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.VecHelper; - import net.minecraft.block.material.PushReaction; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; @@ -54,10 +29,31 @@ import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.fml.network.PacketDistributor; +import java.io.IOException; +import java.util.*; +import java.util.Map.Entry; + +import org.apache.commons.lang3.mutable.MutableInt; +import org.apache.commons.lang3.tuple.MutablePair; + +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllMovementBehaviours; +import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.components.actors.SeatEntity; +import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity; +import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MountedContraption; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket; +import com.simibubi.create.foundation.collision.Matrix3d; +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.VecHelper; + public abstract class AbstractContraptionEntity extends Entity implements IEntityAdditionalSpawnData { private static final DataParameter STALLED = - EntityDataManager.createKey(AbstractContraptionEntity.class, DataSerializers.BOOLEAN); + EntityDataManager.createKey(AbstractContraptionEntity.class, DataSerializers.BOOLEAN); public final Map collidingEntities; @@ -391,8 +387,8 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit byte[] byteArray = dataOutput.toByteArray(); int estimatedPacketSize = byteArray.length; if (estimatedPacketSize > 2_000_000) { - Create.logger.warn("Could not send Contraption Spawn Data (Packet too big): " - + getContraption().getType().id + " @" + getPositionVec() + " (" + getUniqueID().toString() + ")"); + Create.LOGGER.warn("Could not send Contraption Spawn Data (Packet too big): " + + getContraption().getType().id + " @" + getPositionVec() + " (" + getUniqueID().toString() + ")"); buffer.writeCompoundTag(new CompoundNBT()); return; } @@ -431,7 +427,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit protected void readAdditional(CompoundNBT compound, boolean spawnData) { if (compound.isEmpty()) return; - + initialized = compound.getBoolean("Initialized"); contraption = Contraption.fromNBT(world, compound.getCompound("Contraption"), spawnData); contraption.entity = this; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java similarity index 66% rename from src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java rename to src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java index a7bfd1806..ca957fcd0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementChecks.java @@ -1,5 +1,8 @@ package com.simibubi.create.content.contraptions.components.structureMovement; +import java.util.ArrayList; +import java.util.List; + import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.content.contraptions.components.actors.AttachedActorBlock; @@ -53,29 +56,132 @@ import net.minecraft.state.properties.AttachFace; import net.minecraft.state.properties.BedPart; import net.minecraft.state.properties.BellAttachment; import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.state.properties.DoubleBlockHalf; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -public class BlockMovementTraits { +public class BlockMovementChecks { - public static boolean movementNecessary(BlockState state, World world, BlockPos pos) { + private static final List MOVEMENT_NECESSARY_CHECKS = new ArrayList<>(); + private static final List MOVEMENT_ALLOWED_CHECKS = new ArrayList<>(); + private static final List BRITTLE_CHECKS = new ArrayList<>(); + private static final List ATTACHED_CHECKS = new ArrayList<>(); + private static final List NOT_SUPPORTIVE_CHECKS = new ArrayList<>(); + + // Registration + // Add new checks to the front instead of the end + + public static void registerMovementNecessaryCheck(MovementNecessaryCheck check) { + MOVEMENT_NECESSARY_CHECKS.add(0, check); + } + + public static void registerMovementAllowedCheck(MovementAllowedCheck check) { + MOVEMENT_ALLOWED_CHECKS.add(0, check); + } + + public static void registerBrittleCheck(BrittleCheck check) { + BRITTLE_CHECKS.add(0, check); + } + + public static void registerAttachedCheck(AttachedCheck check) { + ATTACHED_CHECKS.add(0, check); + } + + public static void registerNotSupportiveCheck(NotSupportiveCheck check) { + NOT_SUPPORTIVE_CHECKS.add(0, check); + } + + public static void registerAllChecks(AllChecks checks) { + registerMovementNecessaryCheck(checks); + registerMovementAllowedCheck(checks); + registerBrittleCheck(checks); + registerAttachedCheck(checks); + registerNotSupportiveCheck(checks); + } + + // Actual check methods + + public static boolean isMovementNecessary(BlockState state, World world, BlockPos pos) { + for (MovementNecessaryCheck check : MOVEMENT_NECESSARY_CHECKS) { + CheckResult result = check.isMovementNecessary(state, world, pos); + if (result != CheckResult.PASS) { + return result.toBoolean(); + } + } + return isMovementNecessaryFallback(state, world, pos); + } + + public static boolean isMovementAllowed(BlockState state, World world, BlockPos pos) { + for (MovementAllowedCheck check : MOVEMENT_ALLOWED_CHECKS) { + CheckResult result = check.isMovementAllowed(state, world, pos); + if (result != CheckResult.PASS) { + return result.toBoolean(); + } + } + return isMovementAllowedFallback(state, world, pos); + } + + /** + * Brittle blocks will be collected first, as they may break when other blocks + * are removed before them + */ + public static boolean isBrittle(BlockState state) { + for (BrittleCheck check : BRITTLE_CHECKS) { + CheckResult result = check.isBrittle(state); + if (result != CheckResult.PASS) { + return result.toBoolean(); + } + } + return isBrittleFallback(state); + } + + /** + * Attached blocks will move if blocks they are attached to are moved + */ + public static boolean isBlockAttachedTowards(BlockState state, World world, BlockPos pos, + Direction direction) { + for (AttachedCheck check : ATTACHED_CHECKS) { + CheckResult result = check.isBlockAttachedTowards(state, world, pos, direction); + if (result != CheckResult.PASS) { + return result.toBoolean(); + } + } + return isBlockAttachedTowardsFallback(state, world, pos, direction); + } + + /** + * Non-Supportive blocks will not continue a chain of blocks picked up by e.g. a + * piston + */ + public static boolean isNotSupportive(BlockState state, Direction facing) { + for (NotSupportiveCheck check : NOT_SUPPORTIVE_CHECKS) { + CheckResult result = check.isNotSupportive(state, facing); + if (result != CheckResult.PASS) { + return result.toBoolean(); + } + } + return isNotSupportiveFallback(state, facing); + } + + // Fallback checks + + private static boolean isMovementNecessaryFallback(BlockState state, World world, BlockPos pos) { if (isBrittle(state)) return true; if (state.getBlock() instanceof FenceGateBlock) return true; if (state.getMaterial() - .isReplaceable()) + .isReplaceable()) return false; if (state.getCollisionShape(world, pos) - .isEmpty()) + .isEmpty()) return false; return true; } - public static boolean movementAllowed(BlockState state, World world, BlockPos pos) { + private static boolean isMovementAllowedFallback(BlockState state, World world, BlockPos pos) { Block block = state.getBlock(); if (block instanceof AbstractChassisBlock) return true; @@ -115,11 +221,7 @@ public class BlockMovementTraits { return state.getPushReaction() != PushReaction.BLOCK; } - /** - * Brittle blocks will be collected first, as they may break when other blocks - * are removed before them - */ - public static boolean isBrittle(BlockState state) { + private static boolean isBrittleFallback(BlockState state) { Block block = state.getBlock(); if (state.contains(BlockStateProperties.HANGING)) return true; @@ -147,11 +249,8 @@ public class BlockMovementTraits { return AllBlockTags.BRITTLE.tag.contains(block); } - /** - * Attached blocks will move if blocks they are attached to are moved - */ - public static boolean isBlockAttachedTowards(IBlockReader world, BlockPos pos, BlockState state, - Direction direction) { + private static boolean isBlockAttachedTowardsFallback(BlockState state, World world, BlockPos pos, + Direction direction) { Block block = state.getBlock(); if (block instanceof LadderBlock) return state.get(LadderBlock.FACING) == direction.getOpposite(); @@ -163,13 +262,15 @@ public class BlockMovementTraits { return direction == Direction.DOWN; if (block instanceof AbstractPressurePlateBlock) return direction == Direction.DOWN; - if (block instanceof DoorBlock) + if (block instanceof DoorBlock) { + if (state.get(DoorBlock.HALF) == DoubleBlockHalf.LOWER && direction == Direction.UP) + return true; return direction == Direction.DOWN; + } if (block instanceof BedBlock) { Direction facing = state.get(BedBlock.HORIZONTAL_FACING); - if (state.get(BedBlock.PART) == BedPart.HEAD) { + if (state.get(BedBlock.PART) == BedPart.HEAD) facing = facing.getOpposite(); - } return direction == facing; } if (block instanceof RedstoneLinkBlock) @@ -221,21 +322,17 @@ public class BlockMovementTraits { } if (state.getBlock() instanceof SailBlock) return direction.getAxis() != state.get(SailBlock.FACING) - .getAxis(); + .getAxis(); if (state.getBlock() instanceof FluidTankBlock) return FluidTankConnectivityHandler.isConnected(world, pos, pos.offset(direction)); if (AllBlocks.STICKER.has(state) && state.get(StickerBlock.EXTENDED)) { return direction == state.get(StickerBlock.FACING) - && !notSupportive(world.getBlockState(pos.offset(direction)), direction.getOpposite()); + && !isNotSupportive(world.getBlockState(pos.offset(direction)), direction.getOpposite()); } return false; } - /** - * Non-Supportive blocks will not continue a chain of blocks picked up by e.g. a - * piston - */ - public static boolean notSupportive(BlockState state, Direction facing) { + private static boolean isNotSupportiveFallback(BlockState state, Direction facing) { if (AllBlocks.MECHANICAL_DRILL.has(state)) return state.get(BlockStateProperties.FACING) == facing; if (AllBlocks.MECHANICAL_BEARING.has(state)) @@ -257,13 +354,67 @@ public class BlockMovementTraits { .getAxis(); if (AllBlocks.PISTON_EXTENSION_POLE.has(state)) return facing.getAxis() != state.get(BlockStateProperties.FACING) - .getAxis(); + .getAxis(); if (AllBlocks.MECHANICAL_PISTON_HEAD.has(state)) return facing.getAxis() != state.get(BlockStateProperties.FACING) - .getAxis(); + .getAxis(); if (AllBlocks.STICKER.has(state) && !state.get(StickerBlock.EXTENDED)) return facing == state.get(StickerBlock.FACING); return isBrittle(state); } + // Check classes + + public static interface MovementNecessaryCheck { + public CheckResult isMovementNecessary(BlockState state, World world, BlockPos pos); + } + + public static interface MovementAllowedCheck { + public CheckResult isMovementAllowed(BlockState state, World world, BlockPos pos); + } + + public static interface BrittleCheck { + /** + * Brittle blocks will be collected first, as they may break when other blocks + * are removed before them + */ + public CheckResult isBrittle(BlockState state); + } + + public static interface AttachedCheck { + /** + * Attached blocks will move if blocks they are attached to are moved + */ + public CheckResult isBlockAttachedTowards(BlockState state, World world, BlockPos pos, Direction direction); + } + + public static interface NotSupportiveCheck { + /** + * Non-Supportive blocks will not continue a chain of blocks picked up by e.g. a + * piston + */ + public CheckResult isNotSupportive(BlockState state, Direction direction); + } + + public static interface AllChecks extends MovementNecessaryCheck, MovementAllowedCheck, BrittleCheck, AttachedCheck, NotSupportiveCheck { + } + + public static enum CheckResult { + SUCCESS, + FAIL, + PASS; + + public Boolean toBoolean() { + return this == PASS ? null : (this == SUCCESS ? true : false); + } + + public static CheckResult of(boolean b) { + return b ? SUCCESS : FAIL; + } + + public static CheckResult of(Boolean b) { + return b == null ? PASS : (b ? SUCCESS : FAIL); + } + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index d6a4f825d..7870953e9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -61,7 +61,7 @@ import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.fluid.CombinedTankWrapper; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.utility.BlockFace; -import com.simibubi.create.foundation.utility.Coordinate; +import com.simibubi.create.foundation.utility.ICoordinate; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.NBTProcessors; @@ -73,7 +73,6 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.ChestBlock; -import net.minecraft.block.DoorBlock; import net.minecraft.block.IWaterLoggable; import net.minecraft.block.PressurePlateBlock; import net.minecraft.block.material.PushReaction; @@ -87,7 +86,6 @@ import net.minecraft.nbt.ListNBT; import net.minecraft.nbt.NBTUtil; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.ChestType; -import net.minecraft.state.properties.DoubleBlockHalf; import net.minecraft.state.properties.PistonType; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; @@ -212,7 +210,7 @@ public abstract class Contraption { if (bounds == null) bounds = new AxisAlignedBB(BlockPos.ZERO); - if (!BlockMovementTraits.isBrittle(world.getBlockState(pos))) + if (!BlockMovementChecks.isBrittle(world.getBlockState(pos))) frontier.add(pos); if (!addToInitialFrontier(world, pos, forcedDirection, frontier)) return false; @@ -312,12 +310,12 @@ public abstract class Contraption { if (isAnchoringBlockAt(pos)) return true; BlockState state = world.getBlockState(pos); - if (!BlockMovementTraits.movementNecessary(state, world, pos)) + if (!BlockMovementChecks.isMovementNecessary(state, world, pos)) return true; if (!movementAllowed(state, world, pos)) throw AssemblyException.unmovableBlock(pos, state); if (state.getBlock() instanceof AbstractChassisBlock - && !moveChassis(world, pos, forcedDirection, frontier, visited)) + && !moveChassis(world, pos, forcedDirection, frontier, visited)) return false; if (AllBlocks.ADJUSTABLE_CRATE.has(state)) @@ -336,14 +334,14 @@ public abstract class Contraption { Direction offset = state.get(StickerBlock.FACING); BlockPos attached = pos.offset(offset); if (!visited.contains(attached) - && !BlockMovementTraits.notSupportive(world.getBlockState(attached), offset.getOpposite())) + && !BlockMovementChecks.isNotSupportive(world.getBlockState(attached), offset.getOpposite())) frontier.add(attached); } // Bearings potentially create stabilized sub-contraptions if (AllBlocks.MECHANICAL_BEARING.has(state)) moveBearing(pos, frontier, visited, state); - + // WM Bearings attach their structure when moved if (AllBlocks.WINDMILL_BEARING.has(state)) moveWindmillBearing(pos, frontier, visited, state); @@ -365,13 +363,6 @@ public abstract class Contraption { if (isPistonHead(state)) movePistonHead(world, pos, frontier, visited, state); - // Doors try to stay whole - if (state.getBlock() instanceof DoorBlock) { - BlockPos otherPartPos = pos.up(state.get(DoorBlock.HALF) == DoubleBlockHalf.LOWER ? 1 : -1); - if (!visited.contains(otherPartPos)) - frontier.add(otherPartPos); - } - // Cart assemblers attach themselves BlockPos posDown = pos.down(); BlockState stateBelow = world.getBlockState(posDown); @@ -395,24 +386,24 @@ public abstract class Contraption { boolean wasVisited = visited.contains(offsetPos); boolean faceHasGlue = superglue.containsKey(offset); boolean blockAttachedTowardsFace = - BlockMovementTraits.isBlockAttachedTowards(world, offsetPos, blockState, offset.getOpposite()); - boolean brittle = BlockMovementTraits.isBrittle(blockState); + BlockMovementChecks.isBlockAttachedTowards(blockState, world, offsetPos, offset.getOpposite()); + boolean brittle = BlockMovementChecks.isBrittle(blockState); boolean canStick = !brittle && state.canStickTo(blockState) && blockState.canStickTo(state); if (canStick) { if (state.getPushReaction() == PushReaction.PUSH_ONLY - || blockState.getPushReaction() == PushReaction.PUSH_ONLY) { + || blockState.getPushReaction() == PushReaction.PUSH_ONLY) { canStick = false; } - if (BlockMovementTraits.notSupportive(state, offset)) { + if (BlockMovementChecks.isNotSupportive(state, offset)) { canStick = false; } - if (BlockMovementTraits.notSupportive(blockState, offset.getOpposite())) { + if (BlockMovementChecks.isNotSupportive(blockState, offset.getOpposite())) { canStick = false; } } if (!wasVisited && (canStick || blockAttachedTowardsFace || faceHasGlue - || (offset == forcedDirection && !BlockMovementTraits.notSupportive(state, forcedDirection)))) + || (offset == forcedDirection && !BlockMovementChecks.isNotSupportive(state, forcedDirection)))) frontier.add(offsetPos); if (faceHasGlue) addGlue(superglue.get(offset)); @@ -674,7 +665,7 @@ public abstract class Contraption { } protected boolean movementAllowed(BlockState state, World world, BlockPos pos) { - return BlockMovementTraits.movementAllowed(state, world, pos); + return BlockMovementChecks.isMovementAllowed(state, world, pos); } protected boolean isAnchoringBlockAt(BlockPos pos) { @@ -944,11 +935,11 @@ public abstract class Contraption { for (Iterator iterator = blocks.values() .iterator(); iterator.hasNext();) { BlockInfo block = iterator.next(); - if (brittles != BlockMovementTraits.isBrittle(block.state)) + if (brittles != BlockMovementChecks.isBrittle(block.state)) continue; BlockPos add = block.pos.add(anchor) - .add(offset); + .add(offset); if (customBlockRemoval(world, add, block.state)) continue; BlockState oldState = world.getBlockState(add); @@ -974,17 +965,14 @@ public abstract class Contraption { // continue; int flags = BlockFlags.IS_MOVING | BlockFlags.DEFAULT; world.notifyBlockUpdate(add, block.state, Blocks.AIR.getDefaultState(), flags); - world.markAndNotifyBlock(add, world.getChunkAt(add), block.state, Blocks.AIR.getDefaultState(), flags, 512); block.state.updateDiagonalNeighbors(world, add, flags & -2); -// world.markAndNotifyBlock(add, null, block.state, Blocks.AIR.getDefaultState(), -// BlockFlags.IS_MOVING | BlockFlags.DEFAULT); this method did strange logspamming with POI-related blocks } } public void addBlocksToWorld(World world, StructureTransform transform) { for (boolean nonBrittles : Iterate.trueAndFalse) { for (BlockInfo block : blocks.values()) { - if (nonBrittles == BlockMovementTraits.isBrittle(block.state)) + if (nonBrittles == BlockMovementChecks.isBrittle(block.state)) continue; BlockPos targetPos = transform.apply(block.pos); @@ -1226,16 +1214,16 @@ public abstract class Contraption { switch (axis) { case X: return getMaxDistSqr(blocks, BlockPos::getY, BlockPos::getZ); - case Y: - return getMaxDistSqr(blocks, BlockPos::getX, BlockPos::getZ); - case Z: - return getMaxDistSqr(blocks, BlockPos::getX, BlockPos::getY); + case Y: + return getMaxDistSqr(blocks, BlockPos::getX, BlockPos::getZ); + case Z: + return getMaxDistSqr(blocks, BlockPos::getX, BlockPos::getY); } throw new IllegalStateException("Impossible axis"); } - public static float getMaxDistSqr(Set blocks, Coordinate one, Coordinate other) { + public static float getMaxDistSqr(Set blocks, ICoordinate one, ICoordinate other) { float maxDistSq = -1; for (BlockPos pos : blocks) { float a = one.get(pos); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java index b8784ba92..fee951e82 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java @@ -35,11 +35,11 @@ public class ChassisRangeDisplay { public Entry(ChassisTileEntity te) { this.te = te; timer = DISPLAY_TIME; - CreateClient.outliner.showCluster(getOutlineKey(), createSelection(te)) - .colored(0xFFFFFF) - .disableNormals() - .lineWidth(1 / 16f) - .withFaceTexture(AllSpecialTextures.HIGHLIGHT_CHECKERED); + CreateClient.OUTLINER.showCluster(getOutlineKey(), createSelection(te)) + .colored(0xFFFFFF) + .disableNormals() + .lineWidth(1 / 16f) + .withFaceTexture(AllSpecialTextures.HIGHLIGHT_CHECKERED); } protected Object getOutlineKey() { @@ -97,7 +97,7 @@ public class ChassisRangeDisplay { Entry entry = entries.get(pos); if (tickEntry(entry, hasWrench)) iterator.remove(); - CreateClient.outliner.keep(entry.getOutlineKey()); + CreateClient.OUTLINER.keep(entry.getOutlineKey()); } for (Iterator iterator = groupEntries.iterator(); iterator.hasNext();) { @@ -107,7 +107,7 @@ public class ChassisRangeDisplay { if (group == lastHoveredGroup) lastHoveredGroup = null; } - CreateClient.outliner.keep(group.getOutlineKey()); + CreateClient.OUTLINER.keep(group.getOutlineKey()); } if (!hasWrench) @@ -173,9 +173,9 @@ public class ChassisRangeDisplay { GroupEntry hoveredGroup = new GroupEntry(chassis); for (ChassisTileEntity included : hoveredGroup.includedTEs) - CreateClient.outliner.remove(included.getPos()); + CreateClient.OUTLINER.remove(included.getPos()); - groupEntries.forEach(entry -> CreateClient.outliner.remove(entry.getOutlineKey())); + groupEntries.forEach(entry -> CreateClient.OUTLINER.remove(entry.getOutlineKey())); groupEntries.clear(); entries.clear(); groupEntries.add(hoveredGroup); @@ -186,7 +186,7 @@ public class ChassisRangeDisplay { BlockPos pos = chassis.getPos(); GroupEntry entry = getExistingGroupForPos(pos); if (entry != null) - CreateClient.outliner.remove(entry.getOutlineKey()); + CreateClient.OUTLINER.remove(entry.getOutlineKey()); groupEntries.clear(); entries.clear(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java index 0c21d2b83..51e17c7fc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java @@ -11,7 +11,7 @@ import java.util.Queue; import java.util.Set; import com.simibubi.create.AllBlocks; -import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementTraits; +import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementChecks; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; @@ -165,14 +165,14 @@ public class ChassisTileEntity extends SmartTileEntity { break; // Ignore replaceable Blocks and Air-like - if (!BlockMovementTraits.movementNecessary(currentState, world, current)) + if (!BlockMovementChecks.isMovementNecessary(currentState, world, current)) break; - if (BlockMovementTraits.isBrittle(currentState)) + if (BlockMovementChecks.isBrittle(currentState)) break; positions.add(current); - if (BlockMovementTraits.notSupportive(currentState, facing)) + if (BlockMovementChecks.isNotSupportive(currentState, facing)) break; } } @@ -206,9 +206,9 @@ public class ChassisTileEntity extends SmartTileEntity { continue; if (!searchPos.withinDistance(pos, chassisRange + .5f)) continue; - if (!BlockMovementTraits.movementNecessary(searchedState, world, searchPos)) + if (!BlockMovementChecks.isMovementNecessary(searchedState, world, searchPos)) continue; - if (BlockMovementTraits.isBrittle(searchedState)) + if (BlockMovementChecks.isBrittle(searchedState)) continue; localVisited.add(searchPos); @@ -220,7 +220,7 @@ public class ChassisTileEntity extends SmartTileEntity { continue; if (searchPos.equals(pos) && offset != facing) continue; - if (BlockMovementTraits.notSupportive(searchedState, offset)) + if (BlockMovementChecks.isNotSupportive(searchedState, offset)) continue; localFrontier.add(searchPos.offset(offset)); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java index 5a7957c92..a66c769ba 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java @@ -9,7 +9,7 @@ import com.simibubi.create.AllEntityTypes; import com.simibubi.create.AllItems; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementTraits; +import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementChecks; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BearingBlock; import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock; import com.simibubi.create.content.schematics.ISpecialEntityItemRequirement; @@ -195,11 +195,11 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat public static boolean isValidFace(World world, BlockPos pos, Direction direction) { BlockState state = world.getBlockState(pos); - if (BlockMovementTraits.isBlockAttachedTowards(world, pos, state, direction)) + if (BlockMovementChecks.isBlockAttachedTowards(state, world, pos, direction)) return true; - if (!BlockMovementTraits.movementNecessary(state, world, pos)) + if (!BlockMovementChecks.isMovementNecessary(state, world, pos)) return false; - if (BlockMovementTraits.notSupportive(state, direction)) + if (BlockMovementChecks.isNotSupportive(state, direction)) return false; return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java index 1da586170..62c811bf8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java @@ -433,7 +433,7 @@ public class CartAssemblerBlock extends AbstractRailBlock } @Override - public ItemRequirement getRequiredItems(BlockState state) { + public ItemRequirement getRequiredItems(BlockState state, TileEntity te) { ArrayList reuiredItems = new ArrayList<>(); reuiredItems.add(new ItemStack(getRailItem(state))); reuiredItems.add(new ItemStack(asItem())); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java index 6cb418ec2..300f17aab 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java @@ -288,6 +288,11 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity } } + public void onLengthBroken() { + offset = 0; + sendData(); + } + @Override public boolean isValid() { return !isRemoved(); @@ -311,4 +316,4 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity public BlockPos getBlockPosition() { return pos; } -} \ No newline at end of file +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java index 7c1ba23b0..b8c33f45b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java @@ -15,7 +15,7 @@ import java.util.Queue; import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException; -import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementTraits; +import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementChecks; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionLighter; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionType; import com.simibubi.create.content.contraptions.components.structureMovement.TranslatingContraption; @@ -169,13 +169,13 @@ public class PistonContraption extends TranslatingContraption { if (!world.isBlockPresent(currentPos)) throw AssemblyException.unloadedChunk(currentPos); BlockState state = world.getBlockState(currentPos); - if (!BlockMovementTraits.movementNecessary(state, world, currentPos)) + if (!BlockMovementChecks.isMovementNecessary(state, world, currentPos)) return true; - if (BlockMovementTraits.isBrittle(state) && !(state.getBlock() instanceof CarpetBlock)) + if (BlockMovementChecks.isBrittle(state) && !(state.getBlock() instanceof CarpetBlock)) return true; if (isPistonHead(state) && state.get(FACING) == direction.getOpposite()) return true; - if (!BlockMovementTraits.movementAllowed(state, world, currentPos)) + if (!BlockMovementChecks.isMovementAllowed(state, world, currentPos)) if (retracting) return true; else @@ -183,7 +183,7 @@ public class PistonContraption extends TranslatingContraption { if (retracting && state.getPushReaction() == PushReaction.PUSH_ONLY) return true; frontier.add(currentPos); - if (BlockMovementTraits.notSupportive(state, orientation)) + if (BlockMovementChecks.isNotSupportive(state, orientation)) return true; } return true; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java index b88ef5c3a..38191de92 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java @@ -29,6 +29,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.pathfinding.PathType; import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; @@ -71,7 +72,7 @@ public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements public boolean isToolEffective(BlockState state, ToolType tool) { return tool == ToolType.AXE || tool == ToolType.PICKAXE; } - + @Override public PushReaction getPushReaction(BlockState state) { return PushReaction.NORMAL; @@ -113,10 +114,17 @@ public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements final BlockPos basePos = pistonBase; BlockPos.getAllInBox(pistonBase, pistonHead) - .filter(p -> !p.equals(pos) && !p.equals(basePos)) - .forEach(p -> worldIn.destroyBlock(p, !player.isCreative())); + .filter(p -> !p.equals(pos) && !p.equals(basePos)) + .forEach(p -> worldIn.destroyBlock(p, !player.isCreative())); worldIn.setBlockState(basePos, worldIn.getBlockState(basePos) - .with(MechanicalPistonBlock.STATE, PistonState.RETRACTED)); + .with(MechanicalPistonBlock.STATE, PistonState.RETRACTED)); + + TileEntity te = worldIn.getTileEntity(basePos); + if (te instanceof MechanicalPistonTileEntity) { + MechanicalPistonTileEntity baseTE = (MechanicalPistonTileEntity) te; + baseTE.offset = 0; + baseTE.onLengthBroken(); + } } super.onBlockHarvested(worldIn, pos, state, player); @@ -168,8 +176,8 @@ public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements } return state; } - - @Override + + @Override public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java index 2aa7b6d13..adcaca95f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java @@ -42,13 +42,13 @@ public class PulleyBlock extends HorizontalAxisKineticBlock implements ITE blockLayers = RenderType.getBlockLayers(); buffer.getBuffer(RenderType.getSolid()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandler.java index c3836991c..e16e87de6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandler.java @@ -124,7 +124,7 @@ public class CouplingHandler { while (true) { if (safetyCount-- <= 0) { - Create.logger.warn("Infinite loop in coupling iteration"); + Create.LOGGER.warn("Infinite loop in coupling iteration"); return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java index 0a6edeb8d..7e987e371 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java @@ -219,24 +219,24 @@ public class CouplingRenderer { MinecartController first = c.getFirst(); AbstractMinecartEntity mainCart = first.cart(); Vector3d mainCenter = mainCart.getPositionVec() - .add(0, yOffset, 0); + .add(0, yOffset, 0); Vector3d connectedCenter = c.getSecond() - .cart() - .getPositionVec() - .add(0, yOffset, 0); + .cart() + .getPositionVec() + .add(0, yOffset, 0); int color = ColorHelper.mixColors(0xabf0e9, 0xee8572, (float) MathHelper - .clamp(Math.abs(first.getCouplingLength(true) - connectedCenter.distanceTo(mainCenter)) * 8, 0, 1)); + .clamp(Math.abs(first.getCouplingLength(true) - connectedCenter.distanceTo(mainCenter)) * 8, 0, 1)); - CreateClient.outliner.showLine(mainCart.getEntityId() + "", mainCenter, connectedCenter) - .colored(color) - .lineWidth(1 / 8f); + CreateClient.OUTLINER.showLine(mainCart.getEntityId() + "", mainCenter, connectedCenter) + .colored(color) + .lineWidth(1 / 8f); Vector3d point = mainCart.getPositionVec() - .add(0, yOffset, 0); - CreateClient.outliner.showLine(mainCart.getEntityId() + "_dot", point, point.add(0, 1 / 128f, 0)) - .colored(0xffffff) - .lineWidth(1 / 4f); + .add(0, yOffset, 0); + CreateClient.OUTLINER.showLine(mainCart.getEntityId() + "_dot", point, point.add(0, 1 / 128f, 0)) + .colored(0xffffff) + .lineWidth(1 / 4f); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/MinecartController.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/MinecartController.java index 134b38262..59b33b656 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/MinecartController.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/MinecartController.java @@ -197,7 +197,7 @@ public class MinecartController implements INBTSerializable { while (true) { if (safetyCount-- <= 0) { - Create.logger.warn("Infinite loop in coupling iteration"); + Create.LOGGER.warn("Infinite loop in coupling iteration"); return; } cartsToFlip.add(current); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java index 3a6ff0f7a..fe75a7c28 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java @@ -138,10 +138,10 @@ public class EncasedPipeBlock extends Block implements IWrenchable, ISpecialBloc } return to; } - + @Override - public ItemRequirement getRequiredItems(BlockState state) { - return ItemRequirement.of(AllBlocks.FLUID_PIPE.getDefaultState()); + public ItemRequirement getRequiredItems(BlockState state, TileEntity te) { + return ItemRequirement.of(AllBlocks.FLUID_PIPE.getDefaultState(), te); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java index ec2cc1b2d..32f31a4cf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java @@ -148,8 +148,8 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren FluidTransportBehaviour transport = TileEntityBehaviour.get(world, neighbourPos, FluidTransportBehaviour.TYPE); BracketedTileEntityBehaviour bracket = TileEntityBehaviour.get(world, neighbourPos, BracketedTileEntityBehaviour.TYPE); if (isPipe(neighbour)) - return bracket == null || !bracket.isBacketPresent() - || FluidPropagator.getStraightPipeAxis(neighbour) == direction.getAxis(); + return bracket == null || !bracket.isBracketPresent() + || FluidPropagator.getStraightPipeAxis(neighbour) == direction.getAxis(); if (transport == null) return false; return transport.canHaveFlowToward(neighbour, direction.getOpposite()); @@ -228,7 +228,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren IBlockDisplayReader world, BlockPos pos) { BracketedTileEntityBehaviour bracket = TileEntityBehaviour.get(world, pos, BracketedTileEntityBehaviour.TYPE); - if (bracket != null && bracket.isBacketPresent()) + if (bracket != null && bracket.isBracketPresent()) return state; // Update sides that are not ignored @@ -275,10 +275,10 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren return Optional.empty(); return Optional.of(new ItemStack(bracket.getBlock())); } - + @Override public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } - + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java index 5d88c5c9f..fffa566df 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java @@ -78,15 +78,15 @@ public class GlassFluidPipeBlock extends AxisPipeBlock implements IWaterLoggable return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : Fluids.EMPTY.getDefaultState(); } - + @Override - public ItemRequirement getRequiredItems(BlockState state) { - return ItemRequirement.of(AllBlocks.FLUID_PIPE.getDefaultState()); + public ItemRequirement getRequiredItems(BlockState state, TileEntity te) { + return ItemRequirement.of(AllBlocks.FLUID_PIPE.getDefaultState(), te); } - + @Override public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } - + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java index 32455af5c..1caccf3d5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java @@ -42,7 +42,7 @@ import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @EventBusSubscriber(value = Dist.CLIENT) public class GoggleOverlayRenderer { - private static final Map outlines = CreateClient.outliner.getOutlines(); + private static final Map outlines = CreateClient.OUTLINER.getOutlines(); @SubscribeEvent public static void lookingAtBlocksThroughGogglesShowsTooltip(RenderGameOverlayEvent.Post event) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java index 19ac87552..3d5c41c8a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java @@ -35,7 +35,7 @@ public class AirFlowParticle extends SimpleAnimatedParticle { this.maxAge = 40; canCollide = false; selectSprite(7); - Vector3d offset = VecHelper.offsetRandomly(Vector3d.ZERO, Create.random, .25f); + Vector3d offset = VecHelper.offsetRandomly(Vector3d.ZERO, Create.RANDOM, .25f); this.setPosition(posX + offset.x, posY + offset.y, posZ + offset.z); this.prevPosX = posX; this.prevPosY = posY; diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticle.java index ffe3e0e39..31d219f96 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticle.java @@ -39,9 +39,9 @@ public class AirParticle extends SimpleAnimatedParticle { targetZ = (float) (z + dz); drag = data.drag; - twirlRadius = Create.random.nextFloat() / 6; - twirlAngleOffset = Create.random.nextFloat() * 360; - twirlAxis = Create.random.nextBoolean() ? Axis.X : Axis.Z; + twirlRadius = Create.RANDOM.nextFloat() / 6; + twirlAngleOffset = Create.RANDOM.nextFloat() * 360; + twirlAxis = Create.RANDOM.nextBoolean() ? Axis.X : Axis.Z; // speed in m/ticks maxAge = Math.min((int) (new Vector3d(dx, dy, dz).length() / data.speed), 60); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java index cd27761a6..745d33831 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java @@ -126,7 +126,7 @@ public class BasinBlock extends Block implements ITE, IWrenchab } if (success) worldIn.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f, - 1f + Create.random.nextFloat()); + 1f + Create.RANDOM.nextFloat()); te.onEmptied(); } catch (TileEntityException e) { } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeatCondition.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeatCondition.java index 0f84596cd..d2f3f5f39 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/HeatCondition.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/HeatCondition.java @@ -10,7 +10,7 @@ public enum HeatCondition { NONE(0xffffff), HEATED(0xE88300), SUPERHEATED(0x5C93E8), ; - + private int color; private HeatCondition(int color) { @@ -36,7 +36,7 @@ public enum HeatCondition { public String serialize() { return Lang.asId(name()); } - + public String getTranslationKey() { return "recipe.heat_requirement." + serialize(); } @@ -44,9 +44,9 @@ public enum HeatCondition { public static HeatCondition deserialize(String name) { for (HeatCondition heatCondition : values()) if (heatCondition.serialize() - .equals(name)) + .equals(name)) return heatCondition; - Create.logger.warn("Tried to deserialize invalid heat condition: \"" + name + "\""); + Create.LOGGER.warn("Tried to deserialize invalid heat condition: \"" + name + "\""); return NONE; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java index 9fc92040c..78febd8cc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java @@ -85,17 +85,17 @@ public abstract class ProcessingRecipe implements IRecipe< private void validate(String recipeTypeName) { String messageHeader = "Your custom " + recipeTypeName + " recipe (" + id.toString() + ")"; - Logger logger = Create.logger; + Logger logger = Create.LOGGER; int ingredientCount = ingredients.size(); int outputCount = results.size(); if (ingredientCount > getMaxInputCount()) logger.warn(messageHeader + " has more item inputs (" + ingredientCount + ") than supported (" - + getMaxInputCount() + ")."); + + getMaxInputCount() + ")."); if (outputCount > getMaxOutputCount()) logger.warn(messageHeader + " has more item outputs (" + outputCount + ") than supported (" - + getMaxOutputCount() + ")."); + + getMaxOutputCount() + ")."); if (processingDuration > 0 && !canSpecifyDuration()) logger.warn(messageHeader + " specified a duration. Durations have no impact on this type of recipe."); @@ -120,15 +120,15 @@ public abstract class ProcessingRecipe implements IRecipe< public NonNullList getIngredients() { return ingredients; } - + public NonNullList getFluidIngredients() { return fluidIngredients; } - + public NonNullList getRollableResults() { return results; } - + public NonNullList getFluidResults() { return fluidResults; } @@ -156,9 +156,9 @@ public abstract class ProcessingRecipe implements IRecipe< public HeatCondition getRequiredHeat() { return requiredHeat; } - + // IRecipe<> paperwork - + @Override public ItemStack getCraftingResult(T inv) { return getRecipeOutput(); @@ -180,7 +180,7 @@ public abstract class ProcessingRecipe implements IRecipe< public ResourceLocation getId() { return id; } - + @Override public boolean isDynamic() { return true; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerRenderer.java index d8bac663e..51438ca7d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerRenderer.java @@ -53,8 +53,8 @@ public class SpeedControllerRenderer extends SmartTileEntityRenderer required = new ArrayList<>(); if (state.get(PART) != BeltPart.MIDDLE) required.add(AllBlocks.SHAFT.asStack()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java index 0857cfe60..1816a538f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java @@ -143,7 +143,7 @@ public class BeltRenderer extends SafeTileEntityRenderer { return stack; }; - SuperByteBuffer superBuffer = CreateClient.bufferCache.renderDirectionalPartial(AllBlockPartials.BELT_PULLEY, blockState, dir, matrixStackSupplier); + SuperByteBuffer superBuffer = CreateClient.BUFFER_CACHE.renderDirectionalPartial(AllBlockPartials.BELT_PULLEY, blockState, dir, matrixStackSupplier); KineticTileEntityRenderer.standardKineticRotationTransform(superBuffer, te, light).renderInto(ms, vb); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java index 29d5ad0b3..1df40f3b8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java @@ -47,7 +47,7 @@ public class BeltConnectorItem extends BlockItem { @Override public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) { - if (p_150895_1_ == Create.baseCreativeTab) + if (p_150895_1_ == Create.BASE_CREATIVE_TAB) return; super.fillItemGroup(p_150895_1_, p_150895_2_); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticBlockModel.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticBlockModel.java index 065e85d81..390a3ed1d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticBlockModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticBlockModel.java @@ -21,7 +21,7 @@ import net.minecraftforge.client.model.data.ModelProperty; public class BracketedKineticBlockModel extends BakedModelWrapper { - private static ModelProperty BRACKET_PROPERTY = new ModelProperty<>(); + private static final ModelProperty BRACKET_PROPERTY = new ModelProperty<>(); public BracketedKineticBlockModel(IBakedModel template) { super(template); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java index f2dbec548..c926acd2f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java @@ -4,6 +4,7 @@ import java.util.Optional; import java.util.function.Function; import java.util.function.Predicate; +import com.simibubi.create.content.schematics.ItemRequirement; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.advancement.ITriggerable; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; @@ -38,7 +39,7 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour { this.pred = pred; bracket = Optional.empty(); } - + public BracketedTileEntityBehaviour withTrigger(Function trigger) { this.trigger = trigger; return this; @@ -54,7 +55,7 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour { reRender = true; tileEntity.notifyUpdate(); } - + public void triggerAdvancements(World world, PlayerEntity player, BlockState state) { if (trigger == null) return; @@ -73,7 +74,7 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour { tileEntity.notifyUpdate(); } - public boolean isBacketPresent() { + public boolean isBracketPresent() { return getBracket() != Blocks.AIR.getDefaultState(); } @@ -81,6 +82,16 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour { return bracket.orElse(Blocks.AIR.getDefaultState()); } + @Override + public ItemRequirement getRequiredItems() { + return ItemRequirement.of(getBracket(), null); + } + + @Override + public boolean isSafeNBT() { + return true; + } + @Override public void write(CompoundNBT nbt, boolean clientPacket) { bracket.ifPresent(p -> nbt.put("Bracket", NBTUtil.writeBlockState(p))); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java index d74f8f72e..09e6749a7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java @@ -22,11 +22,11 @@ public class EncasedShaftBlock extends AbstractEncasedShaftBlock implements ISpe public static EncasedShaftBlock andesite(Properties properties) { return new EncasedShaftBlock(properties, AllBlocks.ANDESITE_CASING); } - + public static EncasedShaftBlock brass(Properties properties) { return new EncasedShaftBlock(properties, AllBlocks.BRASS_CASING); } - + protected EncasedShaftBlock(Properties properties, BlockEntry casing) { super(properties); this.casing = casing; @@ -36,7 +36,7 @@ public class EncasedShaftBlock extends AbstractEncasedShaftBlock implements ISpe public TileEntity createTileEntity(BlockState state, IBlockReader world) { return AllTileEntities.ENCASED_SHAFT.create(); } - + public BlockEntry getCasing() { return casing; } @@ -49,10 +49,10 @@ public class EncasedShaftBlock extends AbstractEncasedShaftBlock implements ISpe KineticTileEntity.switchToBlockState(context.getWorld(), context.getPos(), AllBlocks.SHAFT.getDefaultState().with(AXIS, state.get(AXIS))); return ActionResultType.SUCCESS; } - + @Override - public ItemRequirement getRequiredItems(BlockState state) { - return ItemRequirement.of(AllBlocks.SHAFT.getDefaultState()); + public ItemRequirement getRequiredItems(BlockState state, TileEntity te) { + return ItemRequirement.of(AllBlocks.SHAFT.getDefaultState(), te); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchable.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchable.java index 52d9489c4..68b5365a5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchable.java +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchable.java @@ -71,11 +71,11 @@ public interface IWrenchable { } default void playRemoveSound(World world, BlockPos pos) { - AllSoundEvents.WRENCH_REMOVE.playOnServer(world, pos, 1, Create.random.nextFloat() * .5f + .5f); + AllSoundEvents.WRENCH_REMOVE.playOnServer(world, pos, 1, Create.RANDOM.nextFloat() * .5f + .5f); } default void playRotateSound(World world, BlockPos pos) { - AllSoundEvents.WRENCH_ROTATE.playOnServer(world, pos, 1, Create.random.nextFloat() + .5f); + AllSoundEvents.WRENCH_ROTATE.playOnServer(world, pos, 1, Create.RANDOM.nextFloat() + .5f); } default BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java index f127b8b26..f5512c873 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java @@ -59,18 +59,18 @@ public class CopperBacktankArmorLayer model = (BipedModel) entityModel; BlockState renderedState = AllBlocks.COPPER_BACKTANK.getDefaultState() - .with(CopperBacktankBlock.HORIZONTAL_FACING, Direction.SOUTH); + .with(CopperBacktankBlock.HORIZONTAL_FACING, Direction.SOUTH); RenderType renderType = RenderType.getCutout(); - SuperByteBuffer backtank = CreateClient.bufferCache.renderBlock(renderedState); + SuperByteBuffer backtank = CreateClient.BUFFER_CACHE.renderBlock(renderedState); SuperByteBuffer cogs = - CreateClient.bufferCache.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, renderedState); + CreateClient.BUFFER_CACHE.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, renderedState); model.bipedBody.rotate(ms); ms.translate(-1 / 2f, 10 / 16f, 1f); ms.scale(1, -1, -1); backtank.light(light) - .renderInto(ms, buffer.getBuffer(renderType)); + .renderInto(ms, buffer.getBuffer(renderType)); cogs.matrixStacker() .centre() diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java index 8cf2b2c89..1fe8b76a6 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java @@ -27,7 +27,7 @@ public class CopperBacktankRenderer extends KineticTileEntityRenderer { super.renderSafe(te, partialTicks, ms, buffer, light, overlay); SuperByteBuffer cogs = - CreateClient.bufferCache.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, te.getBlockState()); + CreateClient.BUFFER_CACHE.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, te.getBlockState()); cogs.matrixStacker() .centre() .rotateY(180 + AngleHelper.horizontalAngle(te.getBlockState() diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java index 5ac126910..b38a3d841 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java @@ -42,7 +42,7 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName int max = getMaxAir(); if (world.isRemote) { Vector3d centerOf = VecHelper.getCenterOf(pos); - Vector3d v = VecHelper.offsetRandomly(centerOf, Create.random, .65f); + Vector3d v = VecHelper.offsetRandomly(centerOf, Create.RANDOM, .65f); Vector3d m = centerOf.subtract(v); if (airLevel != max) world.addParticle(new AirParticleData(1, .05f), v.x, v.y, v.z, m.x, m.y, m.z); diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java index f69316011..38d37a547 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java @@ -90,10 +90,10 @@ public class ZapperRenderHandler { return; cachedBeams.forEach(beam -> { - CreateClient.outliner.endChasingLine(beam, beam.start, beam.end, 1 - beam.itensity) - .disableNormals() - .colored(0xffffff) - .lineWidth(beam.itensity * 1 / 8f); + CreateClient.OUTLINER.endChasingLine(beam, beam.start, beam.end, 1 - beam.itensity) + .disableNormals() + .colored(0xffffff) + .lineWidth(beam.itensity * 1 / 8f); }); cachedBeams.forEach(b -> b.itensity *= .6f); diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperRenderHandler.java index 9edd53a8d..872bc9de7 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperRenderHandler.java @@ -31,11 +31,11 @@ public class WorldshaperRenderHandler { if (renderedPositions == null) return; - CreateClient.outliner.showCluster("terrainZapper", renderedPositions.get()) - .colored(0xbfbfbf) - .disableNormals() - .lineWidth(1 / 32f) - .withFaceTexture(AllSpecialTextures.CHECKERED); + CreateClient.OUTLINER.showCluster("terrainZapper", renderedPositions.get()) + .colored(0xbfbfbf) + .disableNormals() + .lineWidth(1 / 32f) + .withFaceTexture(AllSpecialTextures.CHECKERED); } protected static void gatherSelectedBlocks() { diff --git a/src/main/java/com/simibubi/create/content/logistics/RedstoneLinkNetworkHandler.java b/src/main/java/com/simibubi/create/content/logistics/RedstoneLinkNetworkHandler.java index 910ef68d1..867a9edf5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/RedstoneLinkNetworkHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/RedstoneLinkNetworkHandler.java @@ -67,12 +67,12 @@ public class RedstoneLinkNetworkHandler { public void onLoadWorld(IWorld world) { connections.put(world, new HashMap<>()); - Create.logger.debug("Prepared Redstone Network Space for " + WorldHelper.getDimensionID(world)); + Create.LOGGER.debug("Prepared Redstone Network Space for " + WorldHelper.getDimensionID(world)); } public void onUnloadWorld(IWorld world) { connections.remove(world); - Create.logger.debug("Removed Redstone Network Space for " + WorldHelper.getDimensionID(world)); + Create.LOGGER.debug("Removed Redstone Network Space for " + WorldHelper.getDimensionID(world)); } public Set getNetworkOf(LinkBehaviour actor) { @@ -144,7 +144,7 @@ public class RedstoneLinkNetworkHandler { public Map, Set> networksIn(IWorld world) { if (!connections.containsKey(world)) { - Create.logger.warn( + Create.LOGGER.warn( "Tried to Access unprepared network space of " + WorldHelper.getDimensionID(world)); return new HashMap<>(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java index 701ca4566..63e776d3c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java @@ -313,12 +313,12 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor return; AirParticleData airParticleData = new AirParticleData(drag, motion); Vector3d origin = Vector3d.of(pos); - float xOff = Create.random.nextFloat() * .5f + .25f; - float zOff = Create.random.nextFloat() * .5f + .25f; + float xOff = Create.RANDOM.nextFloat() * .5f + .25f; + float zOff = Create.RANDOM.nextFloat() * .5f + .25f; Vector3d v = origin.add(xOff, verticalStart, zOff); Vector3d d = origin.add(xOff, verticalEnd, zOff) - .subtract(v); - if (Create.random.nextFloat() < 2 * motion) + .subtract(v); + if (Create.RANDOM.nextFloat() < 2 * motion) world.addOptionalParticle(airParticleData, v.x, v.y, v.z, d.x, d.y, d.z); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTargetHandler.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTargetHandler.java index db730fdc6..6fc1c45fc 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTargetHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTargetHandler.java @@ -210,14 +210,14 @@ public class EjectorTargetHandler { ClientWorld world = mc.world; AxisAlignedBB bb = new AxisAlignedBB(0, 0, 0, 1, 0, 1).offset(currentSelection.add(-validX, -yDiff, -validZ)); - CreateClient.outliner.chaseAABB("valid", bb) - .colored(intColor) - .lineWidth(1 / 16f); + CreateClient.OUTLINER.chaseAABB("valid", bb) + .colored(intColor) + .lineWidth(1 / 16f); for (int i = 0; i < segments; i++) { double ticks = ((AnimationTickHolder.getRenderTime() / 3) % tickOffset) + i * tickOffset; Vector3d vec = launcher.getGlobalPos(ticks, d, pos) - .add(xDiff - validX, 0, zDiff - validZ); + .add(xDiff - validX, 0, zDiff - validZ); world.addParticle(data, vec.x, vec.y, vec.z, 0, 0, 0); } } @@ -260,9 +260,9 @@ public class EjectorTargetHandler { BlockState state = world.getBlockState(pos); VoxelShape shape = state.getShape(world, pos); AxisAlignedBB boundingBox = shape.isEmpty() ? new AxisAlignedBB(BlockPos.ZERO) : shape.getBoundingBox(); - CreateClient.outliner.showAABB("target", boundingBox.offset(pos)) - .colored(0xffcb74) - .lineWidth(1 / 16f); + CreateClient.OUTLINER.showAABB("target", boundingBox.offset(pos)) + .colored(0xffcb74) + .lineWidth(1 / 16f); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/SharedDepotBlockMethods.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/SharedDepotBlockMethods.java index 7470f7703..55ba80aad 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/SharedDepotBlockMethods.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/SharedDepotBlockMethods.java @@ -53,7 +53,7 @@ public class SharedDepotBlockMethods { player.inventory.placeItemBackInInventory(world, mainItemStack); behaviour.removeHeldItem(); world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f, - 1f + Create.random.nextFloat()); + 1f + Create.RANDOM.nextFloat()); } ItemStackHandler outputs = behaviour.processingOutputBuffer; for (int i = 0; i < outputs.getSlots(); i++) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java index 839053db0..56de5730e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java @@ -22,6 +22,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; import net.minecraft.state.EnumProperty; import net.minecraft.state.StateContainer.Builder; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.IStringSerializable; @@ -192,8 +193,8 @@ public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements IS } @Override - public ItemRequirement getRequiredItems(BlockState state) { - return ItemRequirement.of(parent.getDefaultState()); + public ItemRequirement getRequiredItems(BlockState state, TileEntity te) { + return ItemRequirement.of(parent.getDefaultState(), te); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java index 5b7db777c..7e9e573eb 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java @@ -7,6 +7,7 @@ import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; @@ -19,8 +20,8 @@ public class AdjustableCrateContainer extends Container { public PlayerInventory playerInventory; public boolean doubleCrate; - public AdjustableCrateContainer(int id, PlayerInventory inv, PacketBuffer extraData) { - super(AllContainerTypes.FLEXCRATE.type, id); + public AdjustableCrateContainer(ContainerType type, int id, PlayerInventory inv, PacketBuffer extraData) { + super(type, id); ClientWorld world = Minecraft.getInstance().world; TileEntity tileEntity = world.getTileEntity(extraData.readBlockPos()); this.playerInventory = inv; @@ -31,13 +32,17 @@ public class AdjustableCrateContainer extends Container { } } - public AdjustableCrateContainer(int id, PlayerInventory inv, AdjustableCrateTileEntity te) { - super(AllContainerTypes.FLEXCRATE.type, id); + public AdjustableCrateContainer(ContainerType type, int id, PlayerInventory inv, AdjustableCrateTileEntity te) { + super(type, id); this.te = te; this.playerInventory = inv; init(); } + public static AdjustableCrateContainer create(int id, PlayerInventory inv, AdjustableCrateTileEntity te) { + return new AdjustableCrateContainer(AllContainerTypes.FLEXCRATE.get(), id, inv, te); + } + private void init() { doubleCrate = te.isDoubleCrate(); int x = doubleCrate ? 51 : 123; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java index ec986de25..6e20236cb 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java @@ -72,7 +72,7 @@ public class AdjustableCrateTileEntity extends CrateTileEntity implements INamed @Override public Container createMenu(int id, PlayerInventory inventory, PlayerEntity player) { - return new AdjustableCrateContainer(id, inventory, this); + return AdjustableCrateContainer.create(id, inventory, this); } public AdjustableCrateTileEntity getOtherCrate() { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java index 1dfe270bf..ff7cbdcc1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java @@ -195,10 +195,10 @@ public class ArmInteractionPointHandler { continue; int color = point.mode == Mode.DEPOSIT ? 0xffcb74 : 0x4f8a8b; - CreateClient.outliner.showAABB(point, shape.getBoundingBox() - .offset(pos)) - .colored(color) - .lineWidth(1 / 16f); + CreateClient.OUTLINER.showAABB(point, shape.getBoundingBox() + .offset(pos)) + .colored(color) + .lineWidth(1 / 16f); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java index 0229882b3..6fcd86229 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java @@ -352,7 +352,7 @@ public class ArmTileEntity extends KineticTileEntity { if (!prevHeld.isItemEqual(heldItem)) world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, .125f, - .5f + Create.random.nextFloat() * .25f); + .5f + Create.RANDOM.nextFloat() * .25f); return; } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java index 8d4b209e8..589f1a9e3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java @@ -9,6 +9,7 @@ import com.simibubi.create.foundation.utility.Pair; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.ClickType; +import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -30,12 +31,16 @@ public class AttributeFilterContainer extends AbstractFilterContainer { WhitelistMode whitelistMode; List> selectedAttributes; - public AttributeFilterContainer(int id, PlayerInventory inv, PacketBuffer extraData) { - super(AllContainerTypes.ATTRIBUTE_FILTER.type, id, inv, extraData); + public AttributeFilterContainer(ContainerType type, int id, PlayerInventory inv, PacketBuffer extraData) { + super(type, id, inv, extraData); } - public AttributeFilterContainer(int id, PlayerInventory inv, ItemStack stack) { - super(AllContainerTypes.ATTRIBUTE_FILTER.type, id, inv, stack); + public AttributeFilterContainer(ContainerType type, int id, PlayerInventory inv, ItemStack stack) { + super(type, id, inv, stack); + } + + public static AttributeFilterContainer create(int id, PlayerInventory inv, ItemStack stack) { + return new AttributeFilterContainer(AllContainerTypes.ATTRIBUTE_FILTER.get(), id, inv, stack); } public void appendSelectedAttribute(ItemAttribute itemAttribute, boolean inverted) { diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterContainer.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterContainer.java index c14b007fe..7df7b0853 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterContainer.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterContainer.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.logistics.item.filter; import com.simibubi.create.AllContainerTypes; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.network.PacketBuffer; @@ -14,12 +15,16 @@ public class FilterContainer extends AbstractFilterContainer { boolean respectNBT; boolean blacklist; - public FilterContainer(int id, PlayerInventory inv, PacketBuffer extraData) { - super(AllContainerTypes.FILTER.type, id, inv, extraData); + public FilterContainer(ContainerType type, int id, PlayerInventory inv, PacketBuffer extraData) { + super(type, id, inv, extraData); } - public FilterContainer(int id, PlayerInventory inv, ItemStack stack) { - super(AllContainerTypes.FILTER.type, id, inv, stack); + public FilterContainer(ContainerType type, int id, PlayerInventory inv, ItemStack stack) { + super(type, id, inv, stack); + } + + public static FilterContainer create(int id, PlayerInventory inv, ItemStack stack) { + return new FilterContainer(AllContainerTypes.FILTER.get(), id, inv, stack); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java index 16d7dcdf2..7daabaf5f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java @@ -157,9 +157,9 @@ public class FilterItem extends Item implements INamedContainerProvider { public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) { ItemStack heldItem = player.getHeldItemMainhand(); if (type == FilterType.REGULAR) - return new FilterContainer(id, inv, heldItem); + return FilterContainer.create(id, inv, heldItem); if (type == FilterType.ATTRIBUTE) - return new AttributeFilterContainer(id, inv, heldItem); + return AttributeFilterContainer.create(id, inv, heldItem); return null; } diff --git a/src/main/java/com/simibubi/create/content/palettes/AllPaletteBlocks.java b/src/main/java/com/simibubi/create/content/palettes/AllPaletteBlocks.java index dfb730b13..bfe653fcc 100644 --- a/src/main/java/com/simibubi/create/content/palettes/AllPaletteBlocks.java +++ b/src/main/java/com/simibubi/create/content/palettes/AllPaletteBlocks.java @@ -36,7 +36,7 @@ import net.minecraftforge.common.Tags; public class AllPaletteBlocks { private static final CreateRegistrate REGISTRATE = Create.registrate() - .itemGroup(() -> Create.palettesCreativeTab) + .itemGroup(() -> Create.PALETTES_CREATIVE_TAB) .startSection(AllSections.PALETTES); // Windows and Glass diff --git a/src/main/java/com/simibubi/create/content/schematics/ClientSchematicLoader.java b/src/main/java/com/simibubi/create/content/schematics/ClientSchematicLoader.java index 9ddd18729..0416a9acd 100644 --- a/src/main/java/com/simibubi/create/content/schematics/ClientSchematicLoader.java +++ b/src/main/java/com/simibubi/create/content/schematics/ClientSchematicLoader.java @@ -59,7 +59,7 @@ public class ClientSchematicLoader { Path path = Paths.get("schematics", schematic); if (!Files.exists(path)) { - Create.logger.fatal("Missing Schematic file: " + path.toString()); + Create.LOGGER.fatal("Missing Schematic file: " + path.toString()); return; } diff --git a/src/main/java/com/simibubi/create/content/schematics/ISpecialBlockItemRequirement.java b/src/main/java/com/simibubi/create/content/schematics/ISpecialBlockItemRequirement.java index c23feb02a..d8c65892a 100644 --- a/src/main/java/com/simibubi/create/content/schematics/ISpecialBlockItemRequirement.java +++ b/src/main/java/com/simibubi/create/content/schematics/ISpecialBlockItemRequirement.java @@ -1,11 +1,12 @@ package com.simibubi.create.content.schematics; import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; public interface ISpecialBlockItemRequirement { - default ItemRequirement getRequiredItems(BlockState state) { + default ItemRequirement getRequiredItems(BlockState state, TileEntity te) { return ItemRequirement.INVALID; } - + } diff --git a/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java b/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java index 67c013348..e4fa3f827 100644 --- a/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java +++ b/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java @@ -3,6 +3,10 @@ package com.simibubi.create.content.schematics; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -24,6 +28,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.SlabType; +import net.minecraft.tileentity.TileEntity; public class ItemRequirement { @@ -31,8 +36,17 @@ public class ItemRequirement { CONSUME, DAMAGE } - ItemUseType usage; - List requiredItems; + public static class StackRequirement { + public final ItemStack item; + public final ItemUseType usage; + + public StackRequirement(ItemUseType usage, ItemStack item) { + this.item = item; + this.usage = usage; + } + } + + List requiredItems; public static ItemRequirement INVALID = new ItemRequirement(); public static ItemRequirement NONE = new ItemRequirement(); @@ -40,21 +54,43 @@ public class ItemRequirement { private ItemRequirement() { } - public ItemRequirement(ItemUseType usage, Item item) { - this(usage, Arrays.asList(new ItemStack(item))); - } - - public ItemRequirement(ItemUseType usage, List requiredItems) { - this.usage = usage; + public ItemRequirement(List requiredItems) { this.requiredItems = requiredItems; } - public static ItemRequirement of(BlockState state) { + public ItemRequirement(ItemUseType usage, ItemStack items) { + this(Arrays.asList(new StackRequirement(usage, items))); + } + + public ItemRequirement(ItemUseType usage, Item item) { + this(usage, new ItemStack(item)); + } + + public ItemRequirement(ItemUseType usage, List requiredItems) { + this(requiredItems.stream().map(req -> new StackRequirement(usage, req)).collect(Collectors.toList())); + } + + + public static ItemRequirement of(BlockState state, TileEntity te) { Block block = state.getBlock(); + + ItemRequirement baseRequirement; + if (block instanceof ISpecialBlockItemRequirement) { + baseRequirement = ((ISpecialBlockItemRequirement) block).getRequiredItems(state, te); + } else { + baseRequirement = ofBlockState(state, block); + } + + // Behaviours can add additional required items + if (te instanceof SmartTileEntity) + baseRequirement = baseRequirement.with(((SmartTileEntity) te).getRequiredItems()); + + return baseRequirement; + } + + private static ItemRequirement ofBlockState(BlockState state, Block block) { if (block == Blocks.AIR) return NONE; - if (block instanceof ISpecialBlockItemRequirement) - return ((ISpecialBlockItemRequirement) block).getRequiredItems(state); Item item = BlockItem.BLOCK_TO_ITEM.getOrDefault(state.getBlock(), Items.AIR); @@ -125,16 +161,25 @@ public class ItemRequirement { return INVALID == this; } - public List getRequiredItems() { + public List getRequiredItems() { return requiredItems; } - public ItemUseType getUsage() { - return usage; - } - public static boolean validate(ItemStack required, ItemStack present) { return required.isEmpty() || required.getItem() == present.getItem(); } + public ItemRequirement with(ItemRequirement other) { + if (this.isInvalid() || other.isInvalid()) + return INVALID; + if (this.isEmpty()) + return other; + if (other.isEmpty()) + return this; + + return new ItemRequirement( + Stream.concat(requiredItems.stream(), other.requiredItems.stream()).collect(Collectors.toList()) + ); + } + } diff --git a/src/main/java/com/simibubi/create/content/schematics/MaterialChecklist.java b/src/main/java/com/simibubi/create/content/schematics/MaterialChecklist.java index e4a37dcc3..1619173b4 100644 --- a/src/main/java/com/simibubi/create/content/schematics/MaterialChecklist.java +++ b/src/main/java/com/simibubi/create/content/schematics/MaterialChecklist.java @@ -43,11 +43,11 @@ public class MaterialChecklist { if (requirement.isInvalid()) return; - for (ItemStack stack : requirement.requiredItems) { - if (requirement.getUsage() == ItemUseType.DAMAGE) - putOrIncrement(damageRequired, stack); - if (requirement.getUsage() == ItemUseType.CONSUME) - putOrIncrement(required, stack); + for (ItemRequirement.StackRequirement stack : requirement.requiredItems) { + if (stack.usage == ItemUseType.DAMAGE) + putOrIncrement(damageRequired, stack.item); + if (stack.usage == ItemUseType.CONSUME) + putOrIncrement(required, stack.item); } } diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java index e60bb7a40..f839edd24 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java @@ -104,7 +104,7 @@ public class SchematicWorld extends WrappedWorld implements IServerWorld { } return tileEntity; } catch (Exception e) { - Create.logger.debug("Could not create TE of block " + blockState + ": " + e); + Create.LOGGER.debug("Could not create TE of block " + blockState + ": " + e); } } return null; diff --git a/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java b/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java index f6750f506..151fdaf08 100644 --- a/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java +++ b/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java @@ -72,7 +72,7 @@ public class ServerSchematicLoader { SchematicUploadEntry entry = activeUploads.get(upload); if (entry.idleTime++ > getConfig().schematicIdleTimeout.get()) { - Create.logger.warn("Schematic Upload timed out: " + upload); + Create.LOGGER.warn("Schematic Upload timed out: " + upload); deadEntries.add(upload); } @@ -94,7 +94,7 @@ public class ServerSchematicLoader { // Unsupported Format if (!schematic.endsWith(".nbt")) { - Create.logger.warn("Attempted Schematic Upload with non-supported Format: " + playerSchematicId); + Create.LOGGER.warn("Attempted Schematic Upload with non-supported Format: " + playerSchematicId); return; } @@ -102,7 +102,7 @@ public class ServerSchematicLoader { Path uploadPath = playerSchematicsPath.resolve(schematic).normalize(); if (!uploadPath.startsWith(playerSchematicsPath)) { - Create.logger.warn("Attempted Schematic Upload with directory escape: {}", playerSchematicId); + Create.LOGGER.warn("Attempted Schematic Upload with directory escape: {}", playerSchematicId); return; } @@ -148,7 +148,7 @@ public class ServerSchematicLoader { table.startUpload(schematic); } catch (IOException e) { - Create.logger.error("Exception Thrown when starting Upload: " + playerSchematicId); + Create.LOGGER.error("Exception Thrown when starting Upload: " + playerSchematicId); e.printStackTrace(); } } @@ -178,13 +178,13 @@ public class ServerSchematicLoader { // Size Validations if (data.length > getConfig().maxSchematicPacketSize.get()) { - Create.logger.warn("Oversized Upload Packet received: " + playerSchematicId); + Create.LOGGER.warn("Oversized Upload Packet received: " + playerSchematicId); cancelUpload(playerSchematicId); return; } if (entry.bytesUploaded > entry.totalBytes) { - Create.logger.warn("Received more data than Expected: " + playerSchematicId); + Create.LOGGER.warn("Received more data than Expected: " + playerSchematicId); cancelUpload(playerSchematicId); return; } @@ -200,7 +200,7 @@ public class ServerSchematicLoader { table.sendUpdate = true; } catch (IOException e) { - Create.logger.error("Exception Thrown when uploading Schematic: " + playerSchematicId); + Create.LOGGER.error("Exception Thrown when uploading Schematic: " + playerSchematicId); e.printStackTrace(); cancelUpload(playerSchematicId); } @@ -215,10 +215,10 @@ public class ServerSchematicLoader { try { entry.stream.close(); Files.deleteIfExists(Paths.get(getSchematicPath(), playerSchematicId)); - Create.logger.warn("Cancelled Schematic Upload: " + playerSchematicId); + Create.LOGGER.warn("Cancelled Schematic Upload: " + playerSchematicId); } catch (IOException e) { - Create.logger.error("Exception Thrown when cancelling Upload: " + playerSchematicId); + Create.LOGGER.error("Exception Thrown when cancelling Upload: " + playerSchematicId); e.printStackTrace(); } @@ -249,7 +249,7 @@ public class ServerSchematicLoader { World world = removed.world; BlockPos pos = removed.tablePos; - Create.logger.info("New Schematic Uploaded: " + playerSchematicId); + Create.LOGGER.info("New Schematic Uploaded: " + playerSchematicId); if (pos == null) return; @@ -264,7 +264,7 @@ public class ServerSchematicLoader { table.inventory.setStackInSlot(1, SchematicItem.create(schematic, player.getGameProfile().getName())); } catch (IOException e) { - Create.logger.error("Exception Thrown when finishing Upload: " + playerSchematicId); + Create.LOGGER.error("Exception Thrown when finishing Upload: " + playerSchematicId); e.printStackTrace(); } } @@ -278,7 +278,7 @@ public class ServerSchematicLoader { // Unsupported Format if (!schematic.endsWith(".nbt")) { - Create.logger.warn("Attempted Schematic Upload with non-supported Format: {}", playerSchematicId); + Create.LOGGER.warn("Attempted Schematic Upload with non-supported Format: {}", playerSchematicId); return; } @@ -286,7 +286,7 @@ public class ServerSchematicLoader { Path path = schematicPath.resolve(playerSchematicId).normalize(); if (!path.startsWith(schematicPath)) { - Create.logger.warn("Attempted Schematic Upload with directory escape: {}", playerSchematicId); + Create.LOGGER.warn("Attempted Schematic Upload with directory escape: {}", playerSchematicId); return; } @@ -326,7 +326,7 @@ public class ServerSchematicLoader { e.printStackTrace(); } } catch (IOException e) { - Create.logger.error("Exception Thrown in direct Schematic Upload: " + playerSchematicId); + Create.LOGGER.error("Exception Thrown in direct Schematic Upload: " + playerSchematicId); e.printStackTrace(); } } diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableContainer.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableContainer.java index fe9bf1dea..945a66572 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableContainer.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableContainer.java @@ -8,6 +8,7 @@ import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; @@ -21,8 +22,8 @@ public class SchematicTableContainer extends Container { private Slot outputSlot; private PlayerEntity player; - public SchematicTableContainer(int id, PlayerInventory inv, PacketBuffer extraData) { - super(AllContainerTypes.SCHEMATIC_TABLE.type, id); + public SchematicTableContainer(ContainerType type, int id, PlayerInventory inv, PacketBuffer extraData) { + super(type, id); player = inv.player; ClientWorld world = Minecraft.getInstance().world; TileEntity tileEntity = world.getTileEntity(extraData.readBlockPos()); @@ -33,19 +34,23 @@ public class SchematicTableContainer extends Container { } } - public SchematicTableContainer(int id, PlayerInventory inv, SchematicTableTileEntity te) { - super(AllContainerTypes.SCHEMATIC_TABLE.type, id); + public SchematicTableContainer(ContainerType type, int id, PlayerInventory inv, SchematicTableTileEntity te) { + super(type, id); this.player = inv.player; this.te = te; init(); } + public static SchematicTableContainer create(int id, PlayerInventory inv, SchematicTableTileEntity te) { + return new SchematicTableContainer(AllContainerTypes.SCHEMATIC_TABLE.get(), id, inv, te); + } + protected void init() { inputSlot = new SlotItemHandler(te.inventory, 0, -35, 41) { @Override public boolean isItemValid(ItemStack stack) { return AllItems.EMPTY_SCHEMATIC.isIn(stack) || AllItems.SCHEMATIC_AND_QUILL.isIn(stack) - || AllItems.SCHEMATIC.isIn(stack); + || AllItems.SCHEMATIC.isIn(stack); } }; diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java index 93b98c4b7..35c5170af 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java @@ -68,16 +68,16 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen availableSchematics = CreateClient.schematicSender.getAvailableSchematics(); + CreateClient.SCHEMATIC_SENDER.refresh(); + List availableSchematics = CreateClient.SCHEMATIC_SENDER.getAvailableSchematics(); schematicsLabel = new Label(mainLeft + 49, mainTop + 26, StringTextComponent.EMPTY).withShadow(); schematicsLabel.text = StringTextComponent.EMPTY; if (!availableSchematics.isEmpty()) { schematicsArea = - new SelectionScrollInput(mainLeft + 45, mainTop + 21, 139, 18).forOptions(availableSchematics) - .titled(availableSchematicsTitle.copy()) - .writingTo(schematicsLabel); + new SelectionScrollInput(mainLeft + 45, mainTop + 21, 139, 18).forOptions(availableSchematics) + .titled(availableSchematicsTitle.copy()) + .writingTo(schematicsLabel); widgets.add(schematicsArea); widgets.add(schematicsLabel); } @@ -176,10 +176,10 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen availableSchematics = schematicSender.getAvailableSchematics(); diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableTileEntity.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableTileEntity.java index 4479525fc..4a321d643 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableTileEntity.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableTileEntity.java @@ -110,8 +110,8 @@ public class SchematicTableTileEntity extends SyncedTileEntity implements ITicka } @Override - public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity p_createMenu_3_) { - return new SchematicTableContainer(p_createMenu_1_, p_createMenu_2_, this); + public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) { + return SchematicTableContainer.create(id, inv, this); } @Override diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonContainer.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonContainer.java index 8fd5a6b07..4fc423b02 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonContainer.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonContainer.java @@ -7,6 +7,7 @@ import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; @@ -18,8 +19,8 @@ public class SchematicannonContainer extends Container { private SchematicannonTileEntity te; private PlayerEntity player; - public SchematicannonContainer(int id, PlayerInventory inv, PacketBuffer buffer) { - super(AllContainerTypes.SCHEMATICANNON.type, id); + public SchematicannonContainer(ContainerType type, int id, PlayerInventory inv, PacketBuffer buffer) { + super(type, id); player = inv.player; ClientWorld world = Minecraft.getInstance().world; TileEntity tileEntity = world.getTileEntity(buffer.readBlockPos()); @@ -30,13 +31,17 @@ public class SchematicannonContainer extends Container { } } - public SchematicannonContainer(int id, PlayerInventory inv, SchematicannonTileEntity te) { - super(AllContainerTypes.SCHEMATICANNON.type, id); + public SchematicannonContainer(ContainerType type, int id, PlayerInventory inv, SchematicannonTileEntity te) { + super(type, id); player = inv.player; this.te = te; init(); } + public static SchematicannonContainer create(int id, PlayerInventory inv, SchematicannonTileEntity te) { + return new SchematicannonContainer(AllContainerTypes.SCHEMATICANNON.get(), id, inv, te); + } + protected void init() { int x = 20; int y = 0; diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java index 1dc2eba83..f99431e6c 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java @@ -12,6 +12,7 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.AllTags.AllBlockTags; +import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementChecks; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltPart; import com.simibubi.create.content.contraptions.relays.belt.BeltSlope; @@ -28,15 +29,11 @@ import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.item.ItemHelper.ExtractionCountMode; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; -import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.IPartialSafeNBT; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.NBTProcessors; -import net.minecraft.block.AbstractRailBlock; -import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.PistonHeadBlock; @@ -432,17 +429,19 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC boolean shouldSkip = false; BlockState blockState = Blocks.AIR.getDefaultState(); + TileEntity tileEntity = null; ItemRequirement requirement; if (entityMode) { requirement = ItemRequirement.of(blockReader.getEntities() - .collect(Collectors.toList()) - .get(printingEntityIndex)); + .collect(Collectors.toList()) + .get(printingEntityIndex)); } else { blockState = BlockHelper.setZeroAge(blockReader.getBlockState(target)); - requirement = ItemRequirement.of(blockState); - shouldSkip = !shouldPlace(target, blockState); + tileEntity = blockReader.getTileEntity(target); + requirement = ItemRequirement.of(blockState, tileEntity); + shouldSkip = !shouldPlace(target, blockState, tileEntity); } if (shouldSkip || requirement.isInvalid()) { @@ -452,10 +451,10 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } // Find item - List requiredItems = requirement.getRequiredItems(); + List requiredItems = requirement.getRequiredItems(); if (!requirement.isEmpty()) { - for (ItemStack required : requiredItems) { - if (!grabItemsFromAttachedInventories(required, requirement.getUsage(), true)) { + for (ItemRequirement.StackRequirement required : requiredItems) { + if (!grabItemsFromAttachedInventories(required.item, required.usage, true)) { if (skipMissing) { statusMsg = "skipping"; blockSkipped = true; @@ -466,15 +465,15 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC return; } - missingItem = required; + missingItem = required.item; state = State.PAUSED; statusMsg = "missingBlock"; return; } } - for (ItemStack required : requiredItems) - grabItemsFromAttachedInventories(required, requirement.getUsage(), false); + for (ItemRequirement.StackRequirement required : requiredItems) + grabItemsFromAttachedInventories(required.item, required.usage, false); } // Success @@ -484,11 +483,11 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC else statusMsg = "clearing"; - ItemStack icon = requirement.isEmpty() || requiredItems.isEmpty() ? ItemStack.EMPTY : requiredItems.get(0); + ItemStack icon = requirement.isEmpty() || requiredItems.isEmpty() ? ItemStack.EMPTY : requiredItems.get(0).item; if (entityMode) launchEntity(target, icon, blockReader.getEntities() - .collect(Collectors.toList()) - .get(printingEntityIndex)); + .collect(Collectors.toList()) + .get(printingEntityIndex)); else if (AllBlocks.BELT.has(blockState)) { TileEntity te = blockReader.getTileEntity(currentPos.add(schematicAnchor)); blockState = stripBeltIfNotLast(blockState); @@ -728,8 +727,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } public static boolean shouldDeferBlock(BlockState state) { - Block block = state.getBlock(); - return block instanceof AbstractRailBlock || block.is(AllBlocks.GANTRY_CARRIAGE.get()); + return state.getBlock().is(AllBlocks.GANTRY_CARRIAGE.get()) || BlockMovementChecks.isBrittle(state); } public void finishedPrinting() { @@ -759,16 +757,16 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC deferredBlocks.clear(); } - protected boolean shouldPlace(BlockPos pos, BlockState state) { + protected boolean shouldPlace(BlockPos pos, BlockState state, TileEntity te) { if (world == null) return false; BlockState toReplace = world.getBlockState(pos); boolean placingAir = state.getBlock() - .isAir(state, world, pos); + .isAir(state, world, pos); BlockState toReplaceOther = null; if (state.contains(BlockStateProperties.BED_PART) && state.contains(BlockStateProperties.HORIZONTAL_FACING) - && state.get(BlockStateProperties.BED_PART) == BedPart.FOOT) + && state.get(BlockStateProperties.BED_PART) == BedPart.FOOT) toReplaceOther = world.getBlockState(pos.offset(state.get(BlockStateProperties.HORIZONTAL_FACING))); if (state.contains(BlockStateProperties.DOUBLE_BLOCK_HALF) && state.get(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.LOWER) @@ -782,15 +780,15 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC if (toReplace == state) return false; if (toReplace.getBlockHardness(world, pos) == -1 - || (toReplaceOther != null && toReplaceOther.getBlockHardness(world, pos) == -1)) + || (toReplaceOther != null && toReplaceOther.getBlockHardness(world, pos) == -1)) return false; if (pos.withinDistance(getPos(), 2f)) return false; if (!replaceTileEntities - && (toReplace.hasTileEntity() || (toReplaceOther != null && toReplaceOther.hasTileEntity()))) + && (toReplace.hasTileEntity() || (toReplaceOther != null && toReplaceOther.hasTileEntity()))) return false; - if (shouldIgnoreBlockState(state)) + if (shouldIgnoreBlockState(state, te)) return false; if (replaceMode == 3) @@ -798,23 +796,23 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC if (replaceMode == 2 && !placingAir) return true; if (replaceMode == 1 - && (state.isNormalCube(blockReader, pos.subtract(schematicAnchor)) || (!toReplace.isNormalCube(world, pos) + && (state.isNormalCube(blockReader, pos.subtract(schematicAnchor)) || (!toReplace.isNormalCube(world, pos) && (toReplaceOther == null || !toReplaceOther.isNormalCube(world, pos)))) - && !placingAir) + && !placingAir) return true; if (replaceMode == 0 && !toReplace.isNormalCube(world, pos) - && (toReplaceOther == null || !toReplaceOther.isNormalCube(world, pos)) && !placingAir) + && (toReplaceOther == null || !toReplaceOther.isNormalCube(world, pos)) && !placingAir) return true; return false; } - protected boolean shouldIgnoreBlockState(BlockState state) { + protected boolean shouldIgnoreBlockState(BlockState state, TileEntity te) { // Block doesnt have a mapping (Water, lava, etc) if (state.getBlock() == Blocks.STRUCTURE_VOID) return true; - ItemRequirement requirement = ItemRequirement.of(state); + ItemRequirement requirement = ItemRequirement.of(state, te); if (requirement.isEmpty()) return false; if (requirement.isInvalid()) @@ -822,7 +820,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC // Block doesnt need to be placed twice (Doors, beds, double plants) if (state.contains(BlockStateProperties.DOUBLE_BLOCK_HALF) - && state.get(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.UPPER) + && state.get(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.UPPER) return true; if (state.contains(BlockStateProperties.BED_PART) && state.get(BlockStateProperties.BED_PART) == BedPart.HEAD) return true; @@ -934,7 +932,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC @Override public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) { - return new SchematicannonContainer(id, inv, this); + return SchematicannonContainer.create(id, inv, this); } @Override @@ -951,15 +949,17 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC if (schematicLoaded) { blocksToPlace = blocksPlaced; for (BlockPos pos : blockReader.getAllPositions()) { - BlockState required = blockReader.getBlockState(pos.add(schematicAnchor)); + BlockPos relPos = pos.add(schematicAnchor); + BlockState required = blockReader.getBlockState(relPos); + TileEntity requiredTE = blockReader.getTileEntity(relPos); if (!getWorld().isAreaLoaded(pos.add(schematicAnchor), 0)) { checklist.warnBlockNotLoaded(); continue; } - if (!shouldPlace(pos.add(schematicAnchor), required)) + if (!shouldPlace(pos.add(schematicAnchor), required, requiredTE)) continue; - ItemRequirement requirement = ItemRequirement.of(required); + ItemRequirement requirement = ItemRequirement.of(required, blockReader.getTileEntity(relPos)); if (requirement.isEmpty()) continue; if (requirement.isInvalid()) diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicAndQuillHandler.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicAndQuillHandler.java index aee90c939..af0624b67 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicAndQuillHandler.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicAndQuillHandler.java @@ -239,7 +239,7 @@ public class SchematicAndQuillHandler { if (!convertImmediately) return; if (!Files.exists(path)) { - Create.logger.fatal("Missing Schematic file: " + path.toString()); + Create.LOGGER.fatal("Missing Schematic file: " + path.toString()); return; } try { @@ -248,14 +248,14 @@ public class SchematicAndQuillHandler { AllPackets.channel.sendToServer(new InstantSchematicPacket(filename, origin, bounds)); } catch (IOException e) { - Create.logger.fatal("Error finding Schematic file: " + path.toString()); + Create.LOGGER.fatal("Error finding Schematic file: " + path.toString()); e.printStackTrace(); return; } } private Outliner outliner() { - return CreateClient.outliner; + return CreateClient.OUTLINER; } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java index b775572c0..818327e76 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java @@ -50,14 +50,14 @@ public class SchematicEditScreen extends AbstractSimiScreen { setWindowSize(background.width + 50, background.height); int x = guiLeft; int y = guiTop; - handler = CreateClient.schematicHandler; + handler = CreateClient.SCHEMATIC_HANDLER; xInput = new TextFieldWidget(textRenderer, x + 50, y + 26, 34, 10, StringTextComponent.EMPTY); yInput = new TextFieldWidget(textRenderer, x + 90, y + 26, 34, 10, StringTextComponent.EMPTY); zInput = new TextFieldWidget(textRenderer, x + 130, y + 26, 34, 10, StringTextComponent.EMPTY); BlockPos anchor = handler.getTransformation() - .getAnchor(); + .getAnchor(); if (handler.isDeployed()) { xInput.setText("" + anchor.getX()); yInput.setText("" + anchor.getY()); diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java index 1738b233e..ce7cd33df 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java @@ -90,7 +90,7 @@ public class SchematicPromptScreen extends AbstractSimiScreen { return true; } if (abort.isHovered()) { - CreateClient.schematicAndQuillHandler.discard(); + CreateClient.SCHEMATIC_AND_QUILL_HANDLER.discard(); Minecraft.getInstance().player.closeScreen(); return true; } @@ -102,7 +102,7 @@ public class SchematicPromptScreen extends AbstractSimiScreen { } private void confirm(boolean convertImmediately) { - CreateClient.schematicAndQuillHandler.saveSchematic(nameField.getText(), convertImmediately); + CreateClient.SCHEMATIC_AND_QUILL_HANDLER.saveSchematic(nameField.getText(), convertImmediately); Minecraft.getInstance().player.closeScreen(); } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java index 0a60b3433..bbfa5163c 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java @@ -45,7 +45,7 @@ public abstract class SchematicToolBase implements ISchematicTool { @Override public void init() { - schematicHandler = CreateClient.schematicHandler; + schematicHandler = CreateClient.SCHEMATIC_HANDLER; selectedPos = null; selectedFace = null; schematicSelected = false; diff --git a/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java b/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java index 30a4fdcba..00255c435 100644 --- a/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java +++ b/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java @@ -40,10 +40,10 @@ public class InstantSchematicPacket extends SimplePacketBase { context.get() .enqueueWork(() -> { ServerPlayerEntity player = context.get() - .getSender(); + .getSender(); if (player == null) return; - Create.schematicReceiver.handleInstantSchematic(player, name, player.world, origin, bounds); + Create.SCHEMATIC_RECEIVER.handleInstantSchematic(player, name, player.world, origin, bounds); }); context.get() .setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/content/schematics/packet/SchematicUploadPacket.java b/src/main/java/com/simibubi/create/content/schematics/packet/SchematicUploadPacket.java index b8c37ac39..bde22038b 100644 --- a/src/main/java/com/simibubi/create/content/schematics/packet/SchematicUploadPacket.java +++ b/src/main/java/com/simibubi/create/content/schematics/packet/SchematicUploadPacket.java @@ -72,13 +72,13 @@ public class SchematicUploadPacket extends SimplePacketBase { return; if (code == BEGIN) { BlockPos pos = ((SchematicTableContainer) player.openContainer).getTileEntity() - .getPos(); - Create.schematicReceiver.handleNewUpload(player, schematic, size, pos); + .getPos(); + Create.SCHEMATIC_RECEIVER.handleNewUpload(player, schematic, size, pos); } - if (code == WRITE) - Create.schematicReceiver.handleWriteRequest(player, schematic, data); - if (code == FINISH) - Create.schematicReceiver.handleFinishedUpload(player, schematic); + if (code == WRITE) + Create.SCHEMATIC_RECEIVER.handleWriteRequest(player, schematic, data); + if (code == FINISH) + Create.SCHEMATIC_RECEIVER.handleFinishedUpload(player, schematic); }); context.get() .setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/events/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java index 222dbc624..77d261d04 100644 --- a/src/main/java/com/simibubi/create/events/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -111,9 +111,9 @@ public class ClientEvents { Backend.tick(); ScrollValueHandler.tick(); - CreateClient.schematicSender.tick(); - CreateClient.schematicAndQuillHandler.tick(); - CreateClient.schematicHandler.tick(); + CreateClient.SCHEMATIC_SENDER.tick(); + CreateClient.SCHEMATIC_AND_QUILL_HANDLER.tick(); + CreateClient.SCHEMATIC_HANDLER.tick(); ContraptionHandler.tick(world); CapabilityMinecartController.tick(world); @@ -138,8 +138,8 @@ public class ClientEvents { ArmInteractionPointHandler.tick(); EjectorTargetHandler.tick(); PlacementHelpers.tick(); - CreateClient.outliner.tickOutlines(); - CreateClient.ghostBlocks.tickGhosts(); + CreateClient.OUTLINER.tickOutlines(); + CreateClient.GHOST_BLOCKS.tickGhosts(); ContraptionRenderDispatcher.tick(); } @@ -179,7 +179,7 @@ public class ClientEvents { @SubscribeEvent public static void onRenderWorld(RenderWorldLastEvent event) { Vector3d cameraPos = Minecraft.getInstance().gameRenderer.getActiveRenderInfo() - .getProjectedView(); + .getProjectedView(); float pt = AnimationTickHolder.getPartialTicks(); MatrixStack ms = event.getMatrixStack(); @@ -188,10 +188,10 @@ public class ClientEvents { SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance(); CouplingRenderer.renderAll(ms, buffer); - CreateClient.schematicHandler.render(ms, buffer); - CreateClient.ghostBlocks.renderAll(ms, buffer); + CreateClient.SCHEMATIC_HANDLER.render(ms, buffer); + CreateClient.GHOST_BLOCKS.renderAll(ms, buffer); - CreateClient.outliner.renderOutlines(ms, buffer, pt); + CreateClient.OUTLINER.renderOutlines(ms, buffer, pt); // LightVolumeDebugger.render(ms, buffer); buffer.draw(); RenderSystem.enableCull(); @@ -221,7 +221,7 @@ public class ClientEvents { public static void onRenderHotbar(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay, float partialTicks) { - CreateClient.schematicHandler.renderOverlay(ms, buffer, light, overlay, partialTicks); + CreateClient.SCHEMATIC_HANDLER.renderOverlay(ms, buffer, light, overlay, partialTicks); } @SubscribeEvent diff --git a/src/main/java/com/simibubi/create/events/CommonEvents.java b/src/main/java/com/simibubi/create/events/CommonEvents.java index dfcb926a4..7fcd4f57a 100644 --- a/src/main/java/com/simibubi/create/events/CommonEvents.java +++ b/src/main/java/com/simibubi/create/events/CommonEvents.java @@ -10,7 +10,6 @@ import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipe import com.simibubi.create.content.contraptions.wrench.WrenchItem; import com.simibubi.create.content.curiosities.zapper.ZapperInteractionHandler; import com.simibubi.create.content.curiosities.zapper.ZapperItem; -import com.simibubi.create.content.schematics.ServerSchematicLoader; import com.simibubi.create.foundation.command.AllCommands; import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.utility.Iterate; @@ -54,10 +53,8 @@ public class CommonEvents { public static void onServerTick(ServerTickEvent event) { if (event.phase == Phase.START) return; - if (Create.schematicReceiver == null) - Create.schematicReceiver = new ServerSchematicLoader(); - Create.schematicReceiver.tick(); - Create.lagger.tick(); + Create.SCHEMATIC_RECEIVER.tick(); + Create.LAGGER.tick(); ServerSpeedProvider.serverTick(); } @@ -133,21 +130,21 @@ public class CommonEvents { @SubscribeEvent public static void serverStopped(FMLServerStoppingEvent event) { - Create.schematicReceiver.shutdown(); + Create.SCHEMATIC_RECEIVER.shutdown(); } @SubscribeEvent public static void onLoadWorld(WorldEvent.Load event) { IWorld world = event.getWorld(); - Create.redstoneLinkNetworkHandler.onLoadWorld(world); - Create.torquePropagator.onLoadWorld(world); + Create.REDSTONE_LINK_NETWORK_HANDLER.onLoadWorld(world); + Create.TORQUE_PROPAGATOR.onLoadWorld(world); } @SubscribeEvent public static void onUnloadWorld(WorldEvent.Unload event) { IWorld world = event.getWorld(); - Create.redstoneLinkNetworkHandler.onUnloadWorld(world); - Create.torquePropagator.onUnloadWorld(world); + Create.REDSTONE_LINK_NETWORK_HANDLER.onUnloadWorld(world); + Create.TORQUE_PROPAGATOR.onUnloadWorld(world); WorldAttached.invalidateWorld(world); } diff --git a/src/main/java/com/simibubi/create/events/InputEvents.java b/src/main/java/com/simibubi/create/events/InputEvents.java index 7447b0a94..6cdcb3ff7 100644 --- a/src/main/java/com/simibubi/create/events/InputEvents.java +++ b/src/main/java/com/simibubi/create/events/InputEvents.java @@ -23,7 +23,7 @@ public class InputEvents { if (Minecraft.getInstance().currentScreen != null) return; - CreateClient.schematicHandler.onKeyInput(key, pressed); + CreateClient.SCHEMATIC_HANDLER.onKeyInput(key, pressed); } @SubscribeEvent @@ -33,9 +33,9 @@ public class InputEvents { double delta = event.getScrollDelta(); // CollisionDebugger.onScroll(delta); - boolean cancelled = CreateClient.schematicHandler.mouseScrolled(delta) - || CreateClient.schematicAndQuillHandler.mouseScrolled(delta) || FilteringHandler.onScroll(delta) - || ScrollValueHandler.onScroll(delta); + boolean cancelled = CreateClient.SCHEMATIC_HANDLER.mouseScrolled(delta) + || CreateClient.SCHEMATIC_AND_QUILL_HANDLER.mouseScrolled(delta) || FilteringHandler.onScroll(delta) + || ScrollValueHandler.onScroll(delta); event.setCanceled(cancelled); } @@ -47,8 +47,8 @@ public class InputEvents { int button = event.getButton(); boolean pressed = !(event.getAction() == 0); - CreateClient.schematicHandler.onMouseInput(button, pressed); - CreateClient.schematicAndQuillHandler.onMouseInput(button, pressed); + CreateClient.SCHEMATIC_HANDLER.onMouseInput(button, pressed); + CreateClient.SCHEMATIC_AND_QUILL_HANDLER.onMouseInput(button, pressed); } } diff --git a/src/main/java/com/simibubi/create/foundation/block/ITE.java b/src/main/java/com/simibubi/create/foundation/block/ITE.java index 8054544e8..1bc0863c9 100644 --- a/src/main/java/com/simibubi/create/foundation/block/ITE.java +++ b/src/main/java/com/simibubi/create/foundation/block/ITE.java @@ -97,7 +97,7 @@ public interface ITE { static void report(TileEntityException e) { if (AllConfigs.COMMON.logTeErrors.get()) - Create.logger.debug("TileEntityException thrown!", e); + Create.LOGGER.debug("TileEntityException thrown!", e); } } diff --git a/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java b/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java index 4a67e3d82..e999333ca 100644 --- a/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java @@ -23,20 +23,20 @@ public class ChunkUtilCommand { ColumnPos columnPos = ColumnPosArgument.fromBlockPos(ctx, "pos"); ChunkPos chunkPos = new ChunkPos(columnPos.x >> 4, columnPos.z >> 4); ServerChunkProvider chunkProvider = ctx.getSource() - .getWorld() - .getChunkProvider(); + .getWorld() + .getChunkProvider(); - boolean success = Create.chunkUtil.reloadChunk(chunkProvider, chunkPos); + boolean success = Create.CHUNK_UTIL.reloadChunk(chunkProvider, chunkPos); if (success) { ctx.getSource() - .sendFeedback(new StringTextComponent("scheduled unload for chunk " - + chunkPos.toString() + ", might need to repeat command"), true); + .sendFeedback(new StringTextComponent("scheduled unload for chunk " + + chunkPos.toString() + ", might need to repeat command"), true); return 1; } else { ctx.getSource() - .sendFeedback( - new StringTextComponent( + .sendFeedback( + new StringTextComponent( "unable to schedule unload, is chunk " + chunkPos.toString() + " loaded?"), true); return 0; @@ -49,19 +49,19 @@ public class ChunkUtilCommand { ColumnPos columnPos = ColumnPosArgument.fromBlockPos(ctx, "pos"); ChunkPos chunkPos = new ChunkPos(columnPos.x >> 4, columnPos.z >> 4); ServerChunkProvider chunkProvider = ctx.getSource() - .getWorld() - .getChunkProvider(); + .getWorld() + .getChunkProvider(); - boolean success = Create.chunkUtil.unloadChunk(chunkProvider, chunkPos); + boolean success = Create.CHUNK_UTIL.unloadChunk(chunkProvider, chunkPos); ctx.getSource() - .sendFeedback( - new StringTextComponent("added chunk " + chunkPos.toString() + " to unload list"), - true); + .sendFeedback( + new StringTextComponent("added chunk " + chunkPos.toString() + " to unload list"), + true); if (success) { ctx.getSource() - .sendFeedback(new StringTextComponent("scheduled unload for chunk " - + chunkPos.toString() + ", might need to repeat command"), true); + .sendFeedback(new StringTextComponent("scheduled unload for chunk " + + chunkPos.toString() + ", might need to repeat command"), true); return 1; } else { ctx.getSource() @@ -75,11 +75,11 @@ public class ChunkUtilCommand { .then(Commands.literal("clear") .executes(ctx -> { // chunk clear - int count = Create.chunkUtil.clear(ctx.getSource() - .getWorld() - .getChunkProvider()); + int count = Create.CHUNK_UTIL.clear(ctx.getSource() + .getWorld() + .getChunkProvider()); ctx.getSource() - .sendFeedback(new StringTextComponent("removed " + count + " entries from unload list"), false); + .sendFeedback(new StringTextComponent("removed " + count + " entries from unload list"), false); return 1; })); diff --git a/src/main/java/com/simibubi/create/foundation/command/HighlightPacket.java b/src/main/java/com/simibubi/create/foundation/command/HighlightPacket.java index a66bbb06e..900e250fe 100644 --- a/src/main/java/com/simibubi/create/foundation/command/HighlightPacket.java +++ b/src/main/java/com/simibubi/create/foundation/command/HighlightPacket.java @@ -48,13 +48,13 @@ public class HighlightPacket extends SimplePacketBase { if (Minecraft.getInstance().world == null || !Minecraft.getInstance().world.isBlockPresent(pos)) return; - CreateClient.outliner.showAABB("highlightCommand", VoxelShapes.fullCube() - .getBoundingBox() - .offset(pos), 200) - .lineWidth(1 / 32f) - .colored(0xEeEeEe) - // .colored(0x243B50) - .withFaceTexture(AllSpecialTextures.SELECTION); + CreateClient.OUTLINER.showAABB("highlightCommand", VoxelShapes.fullCube() + .getBoundingBox() + .offset(pos), 200) + .lineWidth(1 / 32f) + .colored(0xEeEeEe) + // .colored(0x243B50) + .withFaceTexture(AllSpecialTextures.SELECTION); } } diff --git a/src/main/java/com/simibubi/create/foundation/command/KillTPSCommand.java b/src/main/java/com/simibubi/create/foundation/command/KillTPSCommand.java index 22ecbce81..46e18f681 100644 --- a/src/main/java/com/simibubi/create/foundation/command/KillTPSCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/KillTPSCommand.java @@ -16,32 +16,32 @@ public class KillTPSCommand { .executes(ctx -> { // killtps no arguments ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.0", - Create.lagger.isLagging() ? Create.lagger.getTickTime() : 0), true); - if (Create.lagger.isLagging()) + .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.0", + Create.LAGGER.isLagging() ? Create.LAGGER.getTickTime() : 0), true); + if (Create.LAGGER.isLagging()) ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), - true); + .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), + true); else ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.1"), - true); + .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.1"), + true); return 1; }) .then(Commands.literal("start") .executes(ctx -> { // killtps start no time - int tickTime = Create.lagger.getTickTime(); + int tickTime = Create.LAGGER.getTickTime(); if (tickTime > 0) { - Create.lagger.setLagging(true); + Create.LAGGER.setLagging(true); ctx.getSource() - .sendFeedback((Lang - .createTranslationTextComponent("command.killTPSCommand.status.slowed_by.1", tickTime)), - true); + .sendFeedback((Lang + .createTranslationTextComponent("command.killTPSCommand.status.slowed_by.1", tickTime)), + true); ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), - true); + .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), + true); } else { ctx.getSource() .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.1"), @@ -55,27 +55,27 @@ public class KillTPSCommand { .executes(ctx -> { // killtps start tickTime int tickTime = IntegerArgumentType.getInteger(ctx, - Lang.translate("command.killTPSCommand.argument.tickTime") - .getUnformattedComponentText()); - Create.lagger.setTickTime(tickTime); - Create.lagger.setLagging(true); + Lang.translate("command.killTPSCommand.argument.tickTime") + .getUnformattedComponentText()); + Create.LAGGER.setTickTime(tickTime); + Create.LAGGER.setLagging(true); ctx.getSource() - .sendFeedback((Lang - .createTranslationTextComponent("command.killTPSCommand.status.slowed_by.1", tickTime)), - true); + .sendFeedback((Lang + .createTranslationTextComponent("command.killTPSCommand.status.slowed_by.1", tickTime)), + true); ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), - true); + .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), + true); return 1; }))) .then(Commands.literal("stop") .executes(ctx -> { // killtps stop - Create.lagger.setLagging(false); + Create.LAGGER.setLagging(false); ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.2"), - false); + .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.2"), + false); return 1; })); diff --git a/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java b/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java index d3a2055b4..6e8fba51c 100644 --- a/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java +++ b/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java @@ -170,7 +170,7 @@ public class SConfigureConfigPacket extends SimplePacketBase { ResourceLocation id = new ResourceLocation(value); if (!PonderRegistry.all.containsKey(id)) { - Create.logger.error("Could not find ponder scenes for item: " + id); + Create.LOGGER.error("Could not find ponder scenes for item: " + id); return; } diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java index 06851d0f3..6fff1acb8 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java @@ -17,6 +17,7 @@ import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivit import com.simibubi.create.foundation.block.IBlockVertexColor; import com.simibubi.create.foundation.block.connected.CTModel; import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour; +import com.simibubi.create.foundation.block.render.ColoredVertexModel; import com.simibubi.create.foundation.block.render.CustomRenderedItemModel; import com.tterrag.registrate.AbstractRegistrate; import com.tterrag.registrate.builders.BlockBuilder; @@ -213,20 +214,26 @@ public class CreateRegistrate extends AbstractRegistrate { @OnlyIn(Dist.CLIENT) private static void registerCTBehviour(Block entry, ConnectedTextureBehaviour behavior) { CreateClient.getCustomBlockModels() - .register(entry.delegate, model -> new CTModel(model, behavior)); + .register(entry.delegate, model -> new CTModel(model, behavior)); } @OnlyIn(Dist.CLIENT) private static void registerCasingConnectivity(T entry, - BiConsumer consumer) { + BiConsumer consumer) { consumer.accept(entry, CreateClient.getCasingConnectivity()); } @OnlyIn(Dist.CLIENT) - private static void registerBlockModel(Block entry, - Supplier> func) { + private static void registerBlockVertexColor(Block entry, IBlockVertexColor colorFunc) { CreateClient.getCustomBlockModels() - .register(entry.delegate, func.get()); + .register(entry.delegate, model -> new ColoredVertexModel(model, colorFunc)); + } + + @OnlyIn(Dist.CLIENT) + private static void registerBlockModel(Block entry, + Supplier> func) { + CreateClient.getCustomBlockModels() + .register(entry.delegate, func.get()); } @OnlyIn(Dist.CLIENT) @@ -250,12 +257,6 @@ public class CreateRegistrate extends AbstractRegistrate { .get()); } - @OnlyIn(Dist.CLIENT) - private static void registerBlockVertexColor(Block entry, IBlockVertexColor colorFunc) { - CreateClient.getColorHandler() - .register(entry, colorFunc); - } - @OnlyIn(Dist.CLIENT) private static void registerItemColor(IItemProvider entry, Supplier> colorFunc) { CreateClient.getColorHandler() diff --git a/src/main/java/com/simibubi/create/foundation/data/LangMerger.java b/src/main/java/com/simibubi/create/foundation/data/LangMerger.java index a4426a706..b1f717bfa 100644 --- a/src/main/java/com/simibubi/create/foundation/data/LangMerger.java +++ b/src/main/java/com/simibubi/create/foundation/data/LangMerger.java @@ -119,7 +119,7 @@ public class LangMerger implements IDataProvider { private void collectExistingEntries(Path path) throws IOException { if (!Files.exists(path)) { - Create.logger.warn("Nothing to merge! It appears no lang was generated before me."); + Create.LOGGER.warn("Nothing to merge! It appears no lang was generated before me."); return; } @@ -237,7 +237,7 @@ public class LangMerger implements IDataProvider { Files.createDirectories(target.getParent()); try (BufferedWriter bufferedwriter = Files.newBufferedWriter(target)) { - Create.logger.info(message); + Create.LOGGER.info(message); bufferedwriter.write(data); bufferedwriter.close(); } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java index d26ee4d42..3f5f87671 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -29,7 +29,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider { @Override protected void registerRecipes(Consumer p_200404_1_) { all.forEach(c -> c.register(p_200404_1_)); - Create.logger.info(getName() + " registered " + all.size() + " recipe" + (all.size() == 1 ? "" : "s")); + Create.LOGGER.info(getName() + " registered " + all.size() + " recipe" + (all.size() == 1 ? "" : "s")); } @FunctionalInterface diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java index 412eb6ae8..06348383c 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java @@ -113,7 +113,7 @@ public class PonderRegistry { InputStream resourceAsStream = Create.class.getClassLoader() .getResourceAsStream(filepath); if (resourceAsStream == null) { - Create.logger.error("Ponder schematic missing: " + path); + Create.LOGGER.error("Ponder schematic missing: " + path); return t; } try (DataInputStream stream = @@ -121,7 +121,7 @@ public class PonderRegistry { CompoundNBT nbt = CompressedStreamTools.read(stream, new NBTSizeTracker(0x20000000L)); t.read(nbt); } catch (IOException e) { - Create.logger.warn("Failed to read ponder schematic", e); + Create.LOGGER.warn("Failed to read ponder schematic", e); } return t; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java index 3bc0ccf90..8d97c0254 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java @@ -629,15 +629,15 @@ public class KineticsScenes { scene.idle(20); Vector3d centerOf = util.vector.centerOf(2, 2, 2); scene.overlay.showControls(new InputWindowElement(centerOf, Pointing.DOWN).rightClick() - .withItem(new ItemStack(Items.BLUE_DYE)), 40); + .withItem(new ItemStack(Items.BLUE_DYE)), 40); scene.idle(7); - scene.world.modifyBlock(util.grid.at(2, 2, 2), s -> AllBlocks.DYED_VALVE_HANDLES.get(11).getDefaultState() - .with(ValveHandleBlock.FACING, Direction.UP), true); + scene.world.modifyBlock(util.grid.at(2, 2, 2), s -> AllBlocks.DYED_VALVE_HANDLES[11].getDefaultState() + .with(ValveHandleBlock.FACING, Direction.UP), true); scene.idle(10); scene.overlay.showText(70) - .text("Valve handles can be dyed for aesthetic purposes") - .placeNearTarget() - .pointAt(centerOf); + .text("Valve handles can be dyed for aesthetic purposes") + .placeNearTarget() + .pointAt(centerOf); } private static void manualSource(SceneBuilder scene, SceneBuildingUtil util, boolean handCrank) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java index 7456ff92b..b43efb782 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java @@ -143,7 +143,7 @@ public class ParrotElement extends AnimatedSceneElement { ParrotEntity create(PonderWorld world) { ParrotEntity entity = new ParrotEntity(EntityType.PARROT, world); - int nextInt = Create.random.nextInt(5); + int nextInt = Create.RANDOM.nextInt(5); entity.setVariant(nextInt == 1 ? 0 : nextInt); // blue parrots are kinda hard to see return entity; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java index 8cac03a46..6f9f6941d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java @@ -329,15 +329,15 @@ public class WorldSectionElement extends AnimatedSceneElement { protected void renderStructure(PonderWorld world, MatrixStack ms, IRenderTypeBuffer buffer, RenderType type, float fade) { - SuperByteBufferCache bufferCache = CreateClient.bufferCache; + SuperByteBufferCache bufferCache = CreateClient.BUFFER_CACHE; int code = hashCode() ^ world.hashCode(); Pair key = Pair.of(code, RenderType.getBlockLayers() - .indexOf(type)); + .indexOf(type)); if (redraw) bufferCache.invalidate(DOC_WORLD_SECTION, key); SuperByteBuffer contraptionBuffer = - bufferCache.get(DOC_WORLD_SECTION, key, () -> buildStructureBuffer(world, type)); + bufferCache.get(DOC_WORLD_SECTION, key, () -> buildStructureBuffer(world, type)); if (contraptionBuffer.isEmpty()) return; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java index 176e79b05..ff4fa77b9 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java @@ -23,9 +23,9 @@ public class EmitParticlesInstruction extends TickingInstruction { } public static Emitter withinBlockSpace(T data, Vector3d motion) { - return (w, x, y, z) -> w.addParticle(data, Math.floor(x) + Create.random.nextFloat(), - Math.floor(y) + Create.random.nextFloat(), Math.floor(z) + Create.random.nextFloat(), motion.x, - motion.y, motion.z); + return (w, x, y, z) -> w.addParticle(data, Math.floor(x) + Create.RANDOM.nextFloat(), + Math.floor(y) + Create.RANDOM.nextFloat(), Math.floor(z) + Create.RANDOM.nextFloat(), motion.x, + motion.y, motion.z); } static ParticleManager paticleManager() { @@ -47,7 +47,7 @@ public class EmitParticlesInstruction extends TickingInstruction { public void tick(PonderScene scene) { super.tick(scene); int runs = (int) runsPerTick; - if (Create.random.nextFloat() < (runsPerTick - runs)) + if (Create.RANDOM.nextFloat() < (runsPerTick - runs)) runs++; for (int i = 0; i < runs; i++) emitter.create(scene.getWorld(), anchor.x, anchor.y, anchor.z); diff --git a/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java b/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java index 1c143cb0c..a41249fa9 100644 --- a/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java +++ b/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java @@ -16,7 +16,7 @@ import net.minecraft.util.Direction; public class PartialBufferer { public static SuperByteBuffer get(PartialModel partial, BlockState referenceState) { - return CreateClient.bufferCache.renderPartial(partial, referenceState); + return CreateClient.BUFFER_CACHE.renderPartial(partial, referenceState); } public static SuperByteBuffer getFacing(PartialModel partial, BlockState referenceState) { @@ -25,7 +25,7 @@ public class PartialBufferer { } public static SuperByteBuffer getFacing(PartialModel partial, BlockState referenceState, Direction facing) { - return CreateClient.bufferCache.renderDirectionalPartial(partial, referenceState, facing, rotateToFace(facing)); + return CreateClient.BUFFER_CACHE.renderDirectionalPartial(partial, referenceState, facing, rotateToFace(facing)); } public static Supplier rotateToFace(Direction facing) { diff --git a/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java index f00dc81b1..cf33b7f0e 100644 --- a/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java @@ -78,9 +78,9 @@ public class TileEntityRenderHelper { .getRegistryName() .toString() + " didn't want to render while moved.\n"; if (AllConfigs.CLIENT.explainRenderErrors.get()) - Create.logger.error(message, e); + Create.LOGGER.error(message, e); else - Create.logger.error(message); + Create.LOGGER.error(message); } ms.pop(); diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java b/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java index e036d7dab..f3dfc18f0 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java @@ -6,8 +6,8 @@ import java.util.List; import java.util.Map; import java.util.function.Consumer; +import com.simibubi.create.content.schematics.ItemRequirement; import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; - import com.simibubi.create.foundation.utility.IPartialSafeNBT; import net.minecraft.block.BlockState; @@ -120,6 +120,7 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka behaviourList.forEach(tb -> tb.write(compound, clientPacket)); } + @Override public void writeSafe(CompoundNBT compound, boolean clientPacket) { super.write(compound); behaviourList.forEach(tb -> { @@ -128,6 +129,14 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka }); } + public ItemRequirement getRequiredItems() { + return behaviourList.stream().reduce( + ItemRequirement.NONE, + (a, b) -> a.with(b.getRequiredItems()), + (a, b) -> a.with(b) + ); + } + @Override public void remove() { forEachBehaviour(TileEntityBehaviour::remove); diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java index 931b5f4bd..4f0588e55 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java @@ -1,5 +1,6 @@ package com.simibubi.create.foundation.tileEntity; +import com.simibubi.create.content.schematics.ItemRequirement; import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; import net.minecraft.block.BlockState; @@ -42,7 +43,13 @@ public abstract class TileEntityBehaviour { } - public boolean isSafeNBT() { return false; } + public boolean isSafeNBT() { + return false; + } + + public ItemRequirement getRequiredItems() { + return ItemRequirement.NONE; + } public void onBlockChanged(BlockState oldState) { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionRenderer.java index 87ddf3a7a..6cfcd227b 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionRenderer.java @@ -81,13 +81,13 @@ public class EdgeInteractionRenderer { } box.offsetLabel(textOffset) - .withColors(0x7A6A2C, 0xB79D64) - .passive(!hit); + .withColors(0x7A6A2C, 0xB79D64) + .passive(!hit); - CreateClient.outliner.showValueBox("edge", box) - .lineWidth(1 / 64f) - .withFaceTexture(hit ? AllSpecialTextures.THIN_CHECKERED : null) - .highlightFace(face); + CreateClient.OUTLINER.showValueBox("edge", box) + .lineWidth(1 / 64f) + .withFaceTexture(hit ? AllSpecialTextures.THIN_CHECKERED : null) + .highlightFace(face); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java index c6b7acebe..1768fd0cd 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java @@ -4,6 +4,7 @@ import java.util.function.Consumer; import java.util.function.Supplier; import com.simibubi.create.content.logistics.item.filter.FilterItem; +import com.simibubi.create.content.schematics.ItemRequirement; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; @@ -13,6 +14,7 @@ import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; import net.minecraft.entity.item.ItemEntity; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.Direction; @@ -168,6 +170,15 @@ public class FilteringBehaviour extends TileEntityBehaviour { super.destroy(); } + @Override + public ItemRequirement getRequiredItems() { + Item filterItem = filter.getItem(); + if (filterItem instanceof FilterItem) + return new ItemRequirement(ItemRequirement.ItemUseType.CONSUME, filterItem); + + return ItemRequirement.NONE; + } + public ItemStack getFilter(Direction side) { return getFilter(); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java index 349949f76..e1d21eb6f 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java @@ -73,17 +73,17 @@ public class FilteringRenderer { AxisAlignedBB bb = isFilterSlotted ? emptyBB.grow(.45f, .31f, .2f) : emptyBB.grow(.25f); ValueBox box = showCount ? new ItemValueBox(label, bb, pos, filter, behaviour.scrollableValue) - : new ValueBox(label, bb, pos); + : new ValueBox(label, bb, pos); box.offsetLabel(behaviour.textShift) - .withColors(fluids ? 0x407088 : 0x7A6A2C, fluids ? 0x70adb5 : 0xB79D64) - .scrollTooltip(showCount && !isFilterSlotted ? new StringTextComponent("[").append(Lang.translate("action.scroll")).append("]") : StringTextComponent.EMPTY) - .passive(!hit); + .withColors(fluids ? 0x407088 : 0x7A6A2C, fluids ? 0x70adb5 : 0xB79D64) + .scrollTooltip(showCount && !isFilterSlotted ? new StringTextComponent("[").append(Lang.translate("action.scroll")).append("]") : StringTextComponent.EMPTY) + .passive(!hit); - CreateClient.outliner.showValueBox(Pair.of("filter", pos), box.transform(behaviour.slotPositioning)) - .lineWidth(1 / 64f) - .withFaceTexture(hit ? AllSpecialTextures.THIN_CHECKERED : null) - .highlightFace(result.getFace()); + CreateClient.OUTLINER.showValueBox(Pair.of("filter", pos), box.transform(behaviour.slotPositioning)) + .lineWidth(1 / 64f) + .withFaceTexture(hit ? AllSpecialTextures.THIN_CHECKERED : null) + .highlightFace(result.getFace()); } public static void renderOnTileEntity(SmartTileEntity tileEntityIn, float partialTicks, MatrixStack ms, diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/SidedFilteringBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/SidedFilteringBehaviour.java index 9a7f0a490..28756ef0a 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/SidedFilteringBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/SidedFilteringBehaviour.java @@ -7,6 +7,7 @@ import java.util.Set; import java.util.function.BiFunction; import java.util.function.Predicate; +import com.simibubi.create.content.schematics.ItemRequirement; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform.Sided; @@ -58,9 +59,6 @@ public class SidedFilteringBehaviour extends FilteringBehaviour { removeFilter(d); } - @Override - public boolean isSafeNBT() { return true; } - @Override public void write(CompoundNBT nbt, boolean clientPacket) { nbt.put("Filters", NBTHelper.writeCompoundList(sidedFilters.entrySet(), entry -> { @@ -112,21 +110,30 @@ public class SidedFilteringBehaviour extends FilteringBehaviour { if (!sidedFilters.containsKey(side)) return true; return sidedFilters.get(side) - .test(stack); + .test(stack); } @Override public void destroy() { sidedFilters.values() - .forEach(FilteringBehaviour::destroy); + .forEach(FilteringBehaviour::destroy); super.destroy(); } + @Override + public ItemRequirement getRequiredItems() { + return sidedFilters.values().stream().reduce( + ItemRequirement.NONE, + (a, b) -> a.with(b.getRequiredItems()), + (a, b) -> a.with(b) + ); + } + public void removeFilter(Direction side) { if (!sidedFilters.containsKey(side)) return; sidedFilters.remove(side) - .destroy(); + .destroy(); } public boolean testHit(Direction direction, Vector3d hit) { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java index 27d529ca7..9b9ef352d 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java @@ -91,7 +91,7 @@ public class LinkBehaviour extends TileEntityBehaviour { } public void notifySignalChange() { - Create.redstoneLinkNetworkHandler.updateNetworkOf(this); + Create.REDSTONE_LINK_NETWORK_HANDLER.updateNetworkOf(this); } @Override @@ -169,7 +169,7 @@ public class LinkBehaviour extends TileEntityBehaviour { } private RedstoneLinkNetworkHandler getHandler() { - return Create.redstoneLinkNetworkHandler; + return Create.REDSTONE_LINK_NETWORK_HANDLER; } public static class SlotPositioning { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java index 6ebd59da6..8e7d31245 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java @@ -49,12 +49,12 @@ public class LinkRenderer { ValueBoxTransform transform = first ? behaviour.firstSlot : behaviour.secondSlot; ValueBox box = new ValueBox(label, bb, pos).withColors(0x601F18, 0xB73C2D) - .offsetLabel(behaviour.textShift) - .passive(!hit); - CreateClient.outliner.showValueBox(Pair.of(Boolean.valueOf(first), pos), box.transform(transform)) - .lineWidth(1 / 64f) - .withFaceTexture(hit ? AllSpecialTextures.THIN_CHECKERED : null) - .highlightFace(result.getFace()); + .offsetLabel(behaviour.textShift) + .passive(!hit); + CreateClient.OUTLINER.showValueBox(Pair.of(Boolean.valueOf(first), pos), box.transform(transform)) + .lineWidth(1 / 64f) + .withFaceTexture(hit ? AllSpecialTextures.THIN_CHECKERED : null) + .highlightFace(result.getFace()); } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java index cae0d79e1..ab5521204 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java @@ -72,12 +72,12 @@ public class ScrollValueRenderer { box.scrollTooltip(new StringTextComponent("[").append(Lang.translate("action.scroll")).append("]")); box.offsetLabel(behaviour.textShift.add(20, -10, 0)) - .withColors(0x5A5D5A, 0xB5B7B6) - .passive(!highlight); + .withColors(0x5A5D5A, 0xB5B7B6) + .passive(!highlight); - CreateClient.outliner.showValueBox(pos, box.transform(behaviour.slotPositioning)) - .lineWidth(1 / 64f) - .highlightFace(face); + CreateClient.OUTLINER.showValueBox(pos, box.transform(behaviour.slotPositioning)) + .lineWidth(1 / 64f) + .highlightFace(face); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java b/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java index 38a66f0b0..deb9d4027 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java @@ -23,7 +23,7 @@ public class FilesHelper { try { Files.createDirectories(Paths.get(name)); } catch (IOException e) { - Create.logger.warn("Could not create Folder: {}", name); + Create.LOGGER.warn("Could not create Folder: {}", name); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/Coordinate.java b/src/main/java/com/simibubi/create/foundation/utility/ICoordinate.java similarity index 81% rename from src/main/java/com/simibubi/create/foundation/utility/Coordinate.java rename to src/main/java/com/simibubi/create/foundation/utility/ICoordinate.java index 6d1a246c7..aa4bdcbb8 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/Coordinate.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ICoordinate.java @@ -3,6 +3,6 @@ package com.simibubi.create.foundation.utility; import net.minecraft.util.math.BlockPos; @FunctionalInterface -public interface Coordinate { +public interface ICoordinate { float get(BlockPos from); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java b/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java index fc362c1ca..cf9877283 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/RemapHelper.java @@ -200,11 +200,11 @@ public class RemapHelper { for (RegistryEvent.MissingMappings.Mapping mapping : mappings) { if (reMap.containsKey(mapping.key.getPath())) { try { - Create.logger.warn("Remapping block '{}' to '{}'", mapping.key, reMap.get(mapping.key.getPath())); + Create.LOGGER.warn("Remapping block '{}' to '{}'", mapping.key, reMap.get(mapping.key.getPath())); mapping.remap(ForgeRegistries.BLOCKS.getValue(reMap.get(mapping.key.getPath()))); } catch (Throwable t) { - Create.logger.warn("Remapping block '{}' to '{}' failed: {}", mapping.key, - reMap.get(mapping.key.getPath()), t); + Create.LOGGER.warn("Remapping block '{}' to '{}' failed: {}", mapping.key, + reMap.get(mapping.key.getPath()), t); } } } @@ -223,11 +223,11 @@ public class RemapHelper { for (RegistryEvent.MissingMappings.Mapping mapping : mappings) { if (reMap.containsKey(mapping.key.getPath())) { try { - Create.logger.warn("Remapping item '{}' to '{}'", mapping.key, reMap.get(mapping.key.getPath())); + Create.LOGGER.warn("Remapping item '{}' to '{}'", mapping.key, reMap.get(mapping.key.getPath())); mapping.remap(ForgeRegistries.ITEMS.getValue(reMap.get(mapping.key.getPath()))); } catch (Throwable t) { - Create.logger.warn("Remapping item '{}' to '{}' failed: {}", mapping.key, - reMap.get(mapping.key.getPath()), t); + Create.LOGGER.warn("Remapping item '{}' to '{}' failed: {}", mapping.key, + reMap.get(mapping.key.getPath()), t); } } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/placement/IPlacementHelper.java b/src/main/java/com/simibubi/create/foundation/utility/placement/IPlacementHelper.java index 0dcdb3e14..2b3403f0f 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/placement/IPlacementHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/placement/IPlacementHelper.java @@ -91,20 +91,20 @@ public interface IPlacementHelper { Vector3d direction = target.subtract(center).normalize(); Vector3d facing = Vector3d.of(arrowPlane.getDirectionVec()); Vector3d start = center.add(direction); - Vector3d offset = direction.scale(distanceFromCenter-1); + Vector3d offset = direction.scale(distanceFromCenter - 1); Vector3d offsetA = direction.crossProduct(facing).normalize().scale(.25); Vector3d offsetB = facing.crossProduct(direction).normalize().scale(.25); Vector3d endA = center.add(direction.scale(.75)).add(offsetA); Vector3d endB = center.add(direction.scale(.75)).add(offsetB); - CreateClient.outliner.showLine("placementArrowA" + center + target, start.add(offset), endA.add(offset)).lineWidth(1/16f); - CreateClient.outliner.showLine("placementArrowB" + center + target, start.add(offset), endB.add(offset)).lineWidth(1/16f); + CreateClient.OUTLINER.showLine("placementArrowA" + center + target, start.add(offset), endA.add(offset)).lineWidth(1 / 16f); + CreateClient.OUTLINER.showLine("placementArrowB" + center + target, start.add(offset), endB.add(offset)).lineWidth(1 / 16f); } default void displayGhost(PlacementOffset offset) { if (!offset.hasGhostState()) return; - CreateClient.ghostBlocks.showGhostState(this, offset.getTransform().apply(offset.getGhostState())) + CreateClient.GHOST_BLOCKS.showGhostState(this, offset.getTransform().apply(offset.getGhostState())) .at(offset.getBlockPos()) .breathingAlpha(); } diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index 8c6c34537..8feb30fb0 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { - "description": "create resources", + "description": "Create resources", "pack_format": 6 } }