Merge pull request #1650 from PepperCode1/mc1.16/cleanup

Cleanup and Refactoring
This commit is contained in:
simibubi 2021-05-25 14:14:12 +02:00 committed by GitHub
commit 4d51e6096b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
116 changed files with 583 additions and 526 deletions

View file

@ -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.customItemModel;
import static com.simibubi.create.foundation.data.ModelGen.oxidizedItemModel; import static com.simibubi.create.foundation.data.ModelGen.oxidizedItemModel;
import java.util.Vector;
import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.AllTags.AllItemTags;
import com.simibubi.create.content.AllSections; import com.simibubi.create.content.AllSections;
@ -203,7 +201,7 @@ import net.minecraftforge.common.ToolType;
public class AllBlocks { public class AllBlocks {
private static final CreateRegistrate REGISTRATE = Create.registrate() private static final CreateRegistrate REGISTRATE = Create.registrate()
.itemGroup(() -> Create.baseCreativeTab); .itemGroup(() -> Create.BASE_CREATIVE_TAB);
// Schematics // Schematics
@ -627,13 +625,12 @@ public class AllBlocks {
.transform(BuilderTransformers.valveHandle(null)) .transform(BuilderTransformers.valveHandle(null))
.register(); .register();
public static final Vector<BlockEntry<ValveHandleBlock>> DYED_VALVE_HANDLES = public static final BlockEntry<?>[] DYED_VALVE_HANDLES = new BlockEntry<?>[DyeColor.values().length];
new Vector<>(DyeColor.values().length);
static { static {
for (DyeColor colour : DyeColor.values()) { for (DyeColor colour : DyeColor.values()) {
String colourName = colour.getString(); String colourName = colour.getString();
DYED_VALVE_HANDLES.add(REGISTRATE.block(colourName + "_valve_handle", ValveHandleBlock::dyed) DYED_VALVE_HANDLES[colour.ordinal()] = REGISTRATE.block(colourName + "_valve_handle", ValveHandleBlock::dyed)
.transform(BuilderTransformers.valveHandle(colour)) .transform(BuilderTransformers.valveHandle(colour))
.recipe((c, p) -> ShapedRecipeBuilder.shapedRecipe(c.get()) .recipe((c, p) -> ShapedRecipeBuilder.shapedRecipe(c.get())
.patternLine("#") .patternLine("#")
@ -642,7 +639,7 @@ public class AllBlocks {
.key('-', AllItemTags.VALVE_HANDLES.tag) .key('-', AllItemTags.VALVE_HANDLES.tag)
.addCriterion("has_valve", RegistrateRecipeProvider.hasItem(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"))) .build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_valve_handle")))
.register()); .register();
} }
} }

View file

@ -3,46 +3,38 @@ package com.simibubi.create;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; 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.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.RedstoneWireBlock; import net.minecraft.block.RedstoneWireBlock;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.color.BlockColors; import net.minecraft.client.renderer.color.BlockColors;
import net.minecraft.client.renderer.color.IBlockColor; import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.client.renderer.color.IItemColor;
import net.minecraft.client.renderer.color.ItemColors; import net.minecraft.client.renderer.color.ItemColors;
import net.minecraft.item.ItemStack;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.util.IItemProvider; import net.minecraft.util.IItemProvider;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.GrassColors; import net.minecraft.world.GrassColors;
import net.minecraft.world.IBlockDisplayReader;
import net.minecraft.world.biome.BiomeColors; import net.minecraft.world.biome.BiomeColors;
import net.minecraftforge.client.event.ColorHandlerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
public class AllColorHandlers { public class AllColorHandlers {
private final Map<Block, IBlockVertexColor> coloredVertexBlocks = new HashMap<>();
private final Map<Block, IBlockColor> coloredBlocks = new HashMap<>(); private final Map<Block, IBlockColor> coloredBlocks = new HashMap<>();
private final Map<IItemProvider, IItemColor> coloredItems = new HashMap<>(); private final Map<IItemProvider, IItemColor> coloredItems = new HashMap<>();
// //
public static IBlockColor getGrassyBlock() { public static IBlockColor getGrassyBlock() {
return new BlockColor( return (state, world, pos, layer) -> pos != null && world != null ? BiomeColors.getGrassColor(world, pos)
(state, world, pos, layer) -> pos != null && world != null ? BiomeColors.getGrassColor(world, pos) : GrassColors.get(0.5D, 1.0D);
: GrassColors.get(0.5D, 1.0D));
} }
public static IItemColor getGrassyItem() { 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() { public static IBlockColor getRedstonePower() {
return new BlockColor((state, world, pos, layer) -> RedstoneWireBlock return (state, world, pos, layer) -> RedstoneWireBlock
.getWireColor(pos != null && world != null ? state.get(BlockStateProperties.POWER_0_15) : 0)); .getWireColor(pos != null && world != null ? state.get(BlockStateProperties.POWER_0_15) : 0);
} }
// //
@ -51,66 +43,22 @@ public class AllColorHandlers {
coloredBlocks.put(block, color); coloredBlocks.put(block, color);
} }
public void register(Block block, IBlockVertexColor color) {
coloredVertexBlocks.put(block, color);
}
public void register(IItemProvider item, IItemColor color) { public void register(IItemProvider item, IItemColor color) {
coloredItems.put(item, 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 { @SubscribeEvent
public void registerBlockColors(ColorHandlerEvent.Block event) {
private Function function; BlockColors blockColors = event.getBlockColors();
coloredBlocks.forEach((block, color) -> blockColors.register(color, block));
@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);
}
}
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));
} }
} }

View file

@ -10,61 +10,36 @@ import com.simibubi.create.content.schematics.block.SchematicTableContainer;
import com.simibubi.create.content.schematics.block.SchematicTableScreen; import com.simibubi.create.content.schematics.block.SchematicTableScreen;
import com.simibubi.create.content.schematics.block.SchematicannonContainer; import com.simibubi.create.content.schematics.block.SchematicannonContainer;
import com.simibubi.create.content.schematics.block.SchematicannonScreen; 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.IHasContainer;
import net.minecraft.client.gui.ScreenManager;
import net.minecraft.client.gui.ScreenManager.IScreenFactory;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.inventory.container.Container; 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), public static final ContainerEntry<SchematicTableContainer> SCHEMATIC_TABLE =
SCHEMATICANNON(SchematicannonContainer::new), register("schematic_table", SchematicTableContainer::new, () -> SchematicTableScreen::new);
FLEXCRATE(AdjustableCrateContainer::new),
FILTER(FilterContainer::new),
ATTRIBUTE_FILTER(AttributeFilterContainer::new),
; public static final ContainerEntry<SchematicannonContainer> SCHEMATICANNON =
register("schematicannon", SchematicannonContainer::new, () -> SchematicannonScreen::new);
public ContainerType<? extends Container> type; public static final ContainerEntry<AdjustableCrateContainer> FLEXCRATE =
private IFactory<?> factory; register("flexcrate", AdjustableCrateContainer::new, () -> AdjustableCrateScreen::new);
private <C extends Container> AllContainerTypes(IContainerFactory<C> factory) { public static final ContainerEntry<FilterContainer> FILTER =
this.factory = factory; register("filter", FilterContainer::new, () -> FilterScreen::new);
public static final ContainerEntry<AttributeFilterContainer> ATTRIBUTE_FILTER =
register("attribute_filter", AttributeFilterContainer::new, () -> AttributeFilterScreen::new);
private static <C extends Container, S extends Screen & IHasContainer<C>> ContainerEntry<C> register(String name, ForgeContainerFactory<C> factory, NonNullSupplier<ScreenFactory<C, S>> screenFactory) {
return Create.registrate().container(name, factory, screenFactory).register();
} }
public static void register(RegistryEvent.Register<ContainerType<?>> event) { public static void register() {}
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 <C extends Container, S extends Screen & IHasContainer<C>> void bind(AllContainerTypes c,
IScreenFactory<C, S> factory) {
ScreenManager.registerFactory((ContainerType<C>) c.type, factory);
}
} }

View file

@ -10,43 +10,47 @@ 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.SuperGlueEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueRenderer;
import com.simibubi.create.foundation.utility.Lang; 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.NonNullConsumer;
import com.tterrag.registrate.util.nullness.NonNullSupplier;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityClassification; import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.EntityType.IFactory; import net.minecraft.entity.EntityType.IFactory;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.client.registry.IRenderFactory;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
public class AllEntityTypes { public class AllEntityTypes {
public static final RegistryEntry<EntityType<OrientedContraptionEntity>> ORIENTED_CONTRAPTION = public static final EntityEntry<OrientedContraptionEntity> ORIENTED_CONTRAPTION =
contraption("contraption", OrientedContraptionEntity::new, 5, 3, true); contraption("contraption", OrientedContraptionEntity::new, () -> OrientedContraptionEntityRenderer::new,
public static final RegistryEntry<EntityType<ControlledContraptionEntity>> CONTROLLED_CONTRAPTION = 5, 3, true);
contraption("stationary_contraption", ControlledContraptionEntity::new, 20, 40, false); public static final EntityEntry<ControlledContraptionEntity> CONTROLLED_CONTRAPTION =
public static final RegistryEntry<EntityType<GantryContraptionEntity>> GANTRY_CONTRAPTION = contraption("stationary_contraption", ControlledContraptionEntity::new, () -> ContraptionEntityRenderer::new,
contraption("gantry_contraption", GantryContraptionEntity::new, 10, 40, false); 20, 40, false);
public static final EntityEntry<GantryContraptionEntity> GANTRY_CONTRAPTION =
contraption("gantry_contraption", GantryContraptionEntity::new, () -> ContraptionEntityRenderer::new,
10, 40, false);
public static final RegistryEntry<EntityType<SuperGlueEntity>> SUPER_GLUE = register("super_glue", public static final EntityEntry<SuperGlueEntity> SUPER_GLUE =
SuperGlueEntity::new, EntityClassification.MISC, 10, Integer.MAX_VALUE, false, true, SuperGlueEntity::build); register("super_glue", SuperGlueEntity::new, () -> SuperGlueRenderer::new,
public static final RegistryEntry<EntityType<SeatEntity>> SEAT = register("seat", SeatEntity::new, EntityClassification.MISC, 10, Integer.MAX_VALUE, false, true, SuperGlueEntity::build);
public static final EntityEntry<SeatEntity> SEAT =
register("seat", SeatEntity::new, () -> SeatEntity.Render::new,
EntityClassification.MISC, 0, Integer.MAX_VALUE, false, true, SeatEntity::build); EntityClassification.MISC, 0, Integer.MAX_VALUE, false, true, SeatEntity::build);
// //
public static void register() {} private static <T extends Entity> EntityEntry<T> contraption(String name, IFactory<T> factory,
NonNullSupplier<IRenderFactory<? super T>> renderer, int range, int updateFrequency,
private static <T extends Entity> RegistryEntry<EntityType<T>> contraption(String name, IFactory<T> factory, boolean sendVelocity) {
int range, int updateFrequency, boolean sendVelocity) { return register(name, factory, renderer, EntityClassification.MISC, range, updateFrequency,
return register(name, factory, EntityClassification.MISC, range, updateFrequency, sendVelocity, true, sendVelocity, true, AbstractContraptionEntity::build);
AbstractContraptionEntity::build);
} }
private static <T extends Entity> RegistryEntry<EntityType<T>> register(String name, IFactory<T> factory, private static <T extends Entity> EntityEntry<T> register(String name, IFactory<T> factory,
EntityClassification group, int range, int updateFrequency, boolean sendVelocity, boolean immuneToFire, NonNullSupplier<IRenderFactory<? super T>> renderer, EntityClassification group, int range,
int updateFrequency, boolean sendVelocity, boolean immuneToFire,
NonNullConsumer<EntityType.Builder<T>> propertyBuilder) { NonNullConsumer<EntityType.Builder<T>> propertyBuilder) {
String id = Lang.asId(name); String id = Lang.asId(name);
return Create.registrate() return Create.registrate()
@ -59,16 +63,9 @@ public class AllEntityTypes {
if (immuneToFire) if (immuneToFire)
b.immuneToFire(); b.immuneToFire();
}) })
.renderer(renderer)
.register(); .register();
} }
@OnlyIn(value = Dist.CLIENT) public static void register() {}
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);
}
} }

View file

@ -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.contraptions.fluids.potion.PotionFluid.PotionFluidAttributes;
import com.simibubi.create.content.palettes.AllPaletteBlocks; import com.simibubi.create.content.palettes.AllPaletteBlocks;
import com.simibubi.create.foundation.data.CreateRegistrate; 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.block.BlockState;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@ -25,22 +25,22 @@ public class AllFluids {
private static final CreateRegistrate REGISTRATE = Create.registrate(); private static final CreateRegistrate REGISTRATE = Create.registrate();
public static RegistryEntry<PotionFluid> POTION = public static FluidEntry<PotionFluid> POTION =
REGISTRATE.virtualFluid("potion", PotionFluidAttributes::new, PotionFluid::new) REGISTRATE.virtualFluid("potion", PotionFluidAttributes::new, PotionFluid::new)
.lang(f -> "fluid.create.potion", "Potion") .lang(f -> "fluid.create.potion", "Potion")
.register(); .register();
public static RegistryEntry<VirtualFluid> TEA = REGISTRATE.virtualFluid("tea") public static FluidEntry<VirtualFluid> TEA = REGISTRATE.virtualFluid("tea")
.lang(f -> "fluid.create.tea", "Builder's Tea") .lang(f -> "fluid.create.tea", "Builder's Tea")
.tag(AllTags.forgeFluidTag("tea")) .tag(AllTags.forgeFluidTag("tea"))
.register(); .register();
public static RegistryEntry<VirtualFluid> MILK = REGISTRATE.virtualFluid("milk") public static FluidEntry<VirtualFluid> MILK = REGISTRATE.virtualFluid("milk")
.lang(f -> "fluid.create.milk", "Milk") .lang(f -> "fluid.create.milk", "Milk")
.tag(AllTags.forgeFluidTag("milk")) .tag(AllTags.forgeFluidTag("milk"))
.register(); .register();
public static RegistryEntry<ForgeFlowingFluid.Flowing> HONEY = public static FluidEntry<ForgeFlowingFluid.Flowing> HONEY =
REGISTRATE.standardFluid("honey", NoColorFluidAttributes::new) REGISTRATE.standardFluid("honey", NoColorFluidAttributes::new)
.lang(f -> "fluid.create.honey", "Honey") .lang(f -> "fluid.create.honey", "Honey")
.attributes(b -> b.viscosity(500) .attributes(b -> b.viscosity(500)
@ -55,7 +55,7 @@ public class AllFluids {
.build() .build()
.register(); .register();
public static RegistryEntry<ForgeFlowingFluid.Flowing> CHOCOLATE = public static FluidEntry<ForgeFlowingFluid.Flowing> CHOCOLATE =
REGISTRATE.standardFluid("chocolate", NoColorFluidAttributes::new) REGISTRATE.standardFluid("chocolate", NoColorFluidAttributes::new)
.lang(f -> "fluid.create.chocolate", "Chocolate") .lang(f -> "fluid.create.chocolate", "Chocolate")
.tag(AllTags.forgeFluidTag("chocolate")) .tag(AllTags.forgeFluidTag("chocolate"))
@ -78,7 +78,7 @@ public class AllFluids {
public static void assignRenderLayers() {} public static void assignRenderLayers() {}
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
private static void makeTranslucent(RegistryEntry<? extends ForgeFlowingFluid> entry) { private static void makeTranslucent(FluidEntry<?> entry) {
ForgeFlowingFluid fluid = entry.get(); ForgeFlowingFluid fluid = entry.get();
RenderTypeLookup.setRenderLayer(fluid, RenderType.getTranslucent()); RenderTypeLookup.setRenderLayer(fluid, RenderType.getTranslucent());
RenderTypeLookup.setRenderLayer(fluid.getStillFluid(), RenderType.getTranslucent()); RenderTypeLookup.setRenderLayer(fluid.getStillFluid(), RenderType.getTranslucent());

View file

@ -61,7 +61,7 @@ import net.minecraft.util.ResourceLocation;
public class AllItems { public class AllItems {
private static final CreateRegistrate REGISTRATE = Create.registrate() private static final CreateRegistrate REGISTRATE = Create.registrate()
.itemGroup(() -> Create.baseCreativeTab); .itemGroup(() -> Create.BASE_CREATIVE_TAB);
// Schematics // Schematics

View file

@ -9,7 +9,8 @@ import net.minecraftforge.fml.client.registry.ClientRegistry;
public enum AllKeys { 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),
; ;

View file

@ -17,12 +17,12 @@ import net.minecraft.block.Blocks;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
public class AllMovementBehaviours { public class AllMovementBehaviours {
private static final HashMap<ResourceLocation, MovementBehaviour> movementBehaviours = new HashMap<>(); private static final HashMap<ResourceLocation, MovementBehaviour> MOVEMENT_BEHAVIOURS = new HashMap<>();
public static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) { public static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) {
if (movementBehaviours.containsKey(resourceLocation)) if (MOVEMENT_BEHAVIOURS.containsKey(resourceLocation))
Create.logger.warn("Movement behaviour for " + resourceLocation.toString() + " was overridden"); Create.LOGGER.warn("Movement behaviour for " + resourceLocation.toString() + " was overridden");
movementBehaviours.put(resourceLocation, movementBehaviour); MOVEMENT_BEHAVIOURS.put(resourceLocation, movementBehaviour);
} }
public static void addMovementBehaviour(Block block, MovementBehaviour movementBehaviour) { public static void addMovementBehaviour(Block block, MovementBehaviour movementBehaviour) {
@ -31,7 +31,7 @@ public class AllMovementBehaviours {
@Nullable @Nullable
public static MovementBehaviour of(ResourceLocation resourceLocation) { public static MovementBehaviour of(ResourceLocation resourceLocation) {
return movementBehaviours.getOrDefault(resourceLocation, null); return MOVEMENT_BEHAVIOURS.getOrDefault(resourceLocation, null);
} }
@Nullable @Nullable
@ -45,7 +45,7 @@ public class AllMovementBehaviours {
} }
public static boolean contains(Block block) { public static boolean contains(Block block) {
return movementBehaviours.containsKey(block.getRegistryName()); return MOVEMENT_BEHAVIOURS.containsKey(block.getRegistryName());
} }
public static <B extends Block> NonNullConsumer<? super B> addMovementBehaviour( public static <B extends Block> NonNullConsumer<? super B> addMovementBehaviour(

View file

@ -2,10 +2,7 @@ package com.simibubi.create;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.util.ResourceLocation; 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 { public enum AllSpecialTextures {
BLANK("blank.png"), BLANK("blank.png"),

View file

@ -31,7 +31,7 @@ import net.minecraftforge.fml.ModList;
public class AllTags { public class AllTags {
private static final CreateRegistrate REGISTRATE = Create.registrate() private static final CreateRegistrate REGISTRATE = Create.registrate()
.itemGroup(() -> Create.baseCreativeTab); .itemGroup(() -> Create.BASE_CREATIVE_TAB);
public static <T extends Block, P> NonNullFunction<BlockBuilder<T, P>, ItemBuilder<BlockItem, BlockBuilder<T, P>>> tagBlockAndItem( public static <T extends Block, P> NonNullFunction<BlockBuilder<T, P>, ItemBuilder<BlockItem, BlockBuilder<T, P>>> tagBlockAndItem(
String tagName) { String tagName) {

View file

@ -157,7 +157,6 @@ import com.simibubi.create.content.schematics.block.SchematicannonInstance;
import com.simibubi.create.content.schematics.block.SchematicannonRenderer; import com.simibubi.create.content.schematics.block.SchematicannonRenderer;
import com.simibubi.create.content.schematics.block.SchematicannonTileEntity; import com.simibubi.create.content.schematics.block.SchematicannonTileEntity;
import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer;
import com.tterrag.registrate.util.entry.BlockEntry;
import com.tterrag.registrate.util.entry.TileEntityEntry; import com.tterrag.registrate.util.entry.TileEntityEntry;
public class AllTileEntities { public class AllTileEntities {
@ -249,7 +248,7 @@ public class AllTileEntities {
.tileEntity("hand_crank", HandCrankTileEntity::new) .tileEntity("hand_crank", HandCrankTileEntity::new)
.instance(() -> HandCrankInstance::new) .instance(() -> HandCrankInstance::new)
.validBlocks(AllBlocks.HAND_CRANK, AllBlocks.COPPER_VALVE_HANDLE) .validBlocks(AllBlocks.HAND_CRANK, AllBlocks.COPPER_VALVE_HANDLE)
.validBlocks(AllBlocks.DYED_VALVE_HANDLES.toArray(new BlockEntry<?>[AllBlocks.DYED_VALVE_HANDLES.size()])) .validBlocks(AllBlocks.DYED_VALVE_HANDLES)
.renderer(() -> HandCrankRenderer::new) .renderer(() -> HandCrankRenderer::new)
.register(); .register();

View file

@ -31,7 +31,6 @@ import com.simibubi.create.foundation.worldgen.AllWorldFeatures;
import com.tterrag.registrate.util.NonNullLazyValue; import com.tterrag.registrate.util.NonNullLazyValue;
import net.minecraft.data.DataGenerator; import net.minecraft.data.DataGenerator;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroup;
import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.item.crafting.IRecipeSerializer;
import net.minecraft.particles.ParticleType; import net.minecraft.particles.ParticleType;
@ -57,52 +56,52 @@ public class Create {
public static final String NAME = "Create"; public static final String NAME = "Create";
public static final String VERSION = "0.3.1c"; public static final String VERSION = "0.3.1c";
public static Logger logger = LogManager.getLogger(); public static final Logger LOGGER = LogManager.getLogger();
public static ItemGroup baseCreativeTab = new CreateItemGroup();
public static ItemGroup palettesCreativeTab = new PalettesItemGroup();
public static Gson GSON = new GsonBuilder().setPrettyPrinting() public static final Gson GSON = new GsonBuilder().setPrettyPrinting()
.disableHtmlEscaping() .disableHtmlEscaping()
.create(); .create();
public static ServerSchematicLoader schematicReceiver; public static final ItemGroup BASE_CREATIVE_TAB = new CreateItemGroup();
public static RedstoneLinkNetworkHandler redstoneLinkNetworkHandler; public static final ItemGroup PALETTES_CREATIVE_TAB = new PalettesItemGroup();
public static TorquePropagator torquePropagator;
public static ServerLagger lagger;
public static ChunkUtil chunkUtil;
public static Random random;
private static final NonNullLazyValue<CreateRegistrate> 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<CreateRegistrate> REGISTRATE = CreateRegistrate.lazy(ID);
public Create() { public Create() {
IEventBus modEventBus = FMLJavaModLoadingContext.get()
.getModEventBus();
AllSoundEvents.prepare(); AllSoundEvents.prepare();
AllBlocks.register(); AllBlocks.register();
AllItems.register(); AllItems.register();
AllFluids.register(); AllFluids.register();
AllTags.register(); AllTags.register();
AllPaletteBlocks.register(); AllPaletteBlocks.register();
AllContainerTypes.register();
AllEntityTypes.register(); AllEntityTypes.register();
AllTileEntities.register(); AllTileEntities.register();
AllMovementBehaviours.register(); AllMovementBehaviours.register();
AllWorldFeatures.register(); AllWorldFeatures.register();
AllConfigs.register();
IEventBus modEventBus = FMLJavaModLoadingContext.get()
.getModEventBus();
IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
modEventBus.addListener(Create::init); modEventBus.addListener(Create::init);
MinecraftForge.EVENT_BUS.addListener(EventPriority.HIGH, Create::onBiomeLoad);
modEventBus.addGenericListener(Feature.class, AllWorldFeatures::registerOreFeatures); modEventBus.addGenericListener(Feature.class, AllWorldFeatures::registerOreFeatures);
modEventBus.addGenericListener(Placement.class, AllWorldFeatures::registerDecoratorFeatures); modEventBus.addGenericListener(Placement.class, AllWorldFeatures::registerDecoratorFeatures);
modEventBus.addGenericListener(IRecipeSerializer.class, AllRecipeTypes::register); modEventBus.addGenericListener(IRecipeSerializer.class, AllRecipeTypes::register);
modEventBus.addGenericListener(ContainerType.class, AllContainerTypes::register);
modEventBus.addGenericListener(ParticleType.class, AllParticleTypes::register); modEventBus.addGenericListener(ParticleType.class, AllParticleTypes::register);
modEventBus.addGenericListener(SoundEvent.class, AllSoundEvents::register); modEventBus.addGenericListener(SoundEvent.class, AllSoundEvents::register);
modEventBus.addListener(AllConfigs::onLoad); modEventBus.addListener(AllConfigs::onLoad);
modEventBus.addListener(AllConfigs::onReload); modEventBus.addListener(AllConfigs::onReload);
modEventBus.addListener(EventPriority.LOWEST, this::gatherData); modEventBus.addListener(EventPriority.LOWEST, this::gatherData);
forgeEventBus.addListener(EventPriority.HIGH, Create::onBiomeLoad);
AllConfigs.register();
random = new Random();
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateClient.addClientListeners(modEventBus)); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CreateClient.addClientListeners(modEventBus));
} }
@ -110,14 +109,9 @@ public class Create {
public static void init(final FMLCommonSetupEvent event) { public static void init(final FMLCommonSetupEvent event) {
CapabilityMinecartController.register(); CapabilityMinecartController.register();
SchematicInstances.register(); SchematicInstances.register();
schematicReceiver = new ServerSchematicLoader();
redstoneLinkNetworkHandler = new RedstoneLinkNetworkHandler();
torquePropagator = new TorquePropagator();
lagger = new ServerLagger();
chunkUtil = new ChunkUtil(); CHUNK_UTIL.init();
chunkUtil.init(); MinecraftForge.EVENT_BUS.register(CHUNK_UTIL);
MinecraftForge.EVENT_BUS.register(chunkUtil);
AllPackets.registerPackets(); AllPackets.registerPackets();
AllTriggers.register(); 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) { public void gatherData(GatherDataEvent event) {
DataGenerator gen = event.getGenerator(); DataGenerator gen = event.getGenerator();
gen.addProvider(new AllAdvancements(gen)); gen.addProvider(new AllAdvancements(gen));
@ -150,4 +132,16 @@ public class Create {
ProcessingRecipeGen.registerAll(gen); 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);
}
} }

View file

@ -63,13 +63,13 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
public class CreateClient { public class CreateClient {
public static ClientSchematicLoader schematicSender; public static final ClientSchematicLoader SCHEMATIC_SENDER = new ClientSchematicLoader();
public static SchematicHandler schematicHandler; public static final SchematicHandler SCHEMATIC_HANDLER = new SchematicHandler();
public static SchematicAndQuillHandler schematicAndQuillHandler; public static final SchematicAndQuillHandler SCHEMATIC_AND_QUILL_HANDLER = new SchematicAndQuillHandler();
public static SuperByteBufferCache bufferCache; public static final SuperByteBufferCache BUFFER_CACHE = new SuperByteBufferCache();
public static WorldAttached<KineticRenderer> kineticRenderer; public static final WorldAttached<KineticRenderer> KINETIC_RENDERER = new WorldAttached<>(KineticRenderer::new);
public static final Outliner outliner = new Outliner(); public static final Outliner OUTLINER = new Outliner();
public static GhostBlocks ghostBlocks; public static final GhostBlocks GHOST_BLOCKS = new GhostBlocks();
private static CustomBlockModels customBlockModels; private static CustomBlockModels customBlockModels;
private static CustomItemModels customItemModels; private static CustomItemModels customItemModels;
@ -79,9 +79,10 @@ public class CreateClient {
public static void addClientListeners(IEventBus modEventBus) { public static void addClientListeners(IEventBus modEventBus) {
modEventBus.addListener(CreateClient::clientInit); modEventBus.addListener(CreateClient::clientInit);
modEventBus.addListener(CreateClient::onModelBake); modEventBus.register(getColorHandler());
modEventBus.addListener(CreateClient::onModelRegistry);
modEventBus.addListener(CreateClient::onTextureStitch); modEventBus.addListener(CreateClient::onTextureStitch);
modEventBus.addListener(CreateClient::onModelRegistry);
modEventBus.addListener(CreateClient::onModelBake);
modEventBus.addListener(AllParticleTypes::registerFactories); modEventBus.addListener(AllParticleTypes::registerFactories);
modEventBus.addListener(ClientEvents::loadCompleted); modEventBus.addListener(ClientEvents::loadCompleted);
@ -91,25 +92,15 @@ public class CreateClient {
public static void clientInit(FMLClientSetupEvent event) { public static void clientInit(FMLClientSetupEvent event) {
AllProgramSpecs.init(); AllProgramSpecs.init();
kineticRenderer = new WorldAttached<>(KineticRenderer::new);
schematicSender = new ClientSchematicLoader(); BUFFER_CACHE.registerCompartment(KineticTileEntityRenderer.KINETIC_TILE);
schematicHandler = new SchematicHandler(); BUFFER_CACHE.registerCompartment(ContraptionRenderDispatcher.CONTRAPTION, 20);
schematicAndQuillHandler = new SchematicAndQuillHandler(); BUFFER_CACHE.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20);
bufferCache = new SuperByteBufferCache();
bufferCache.registerCompartment(KineticTileEntityRenderer.KINETIC_TILE);
bufferCache.registerCompartment(ContraptionRenderDispatcher.CONTRAPTION, 20);
bufferCache.registerCompartment(WorldSectionElement.DOC_WORLD_SECTION, 20);
ghostBlocks = new GhostBlocks();
AllKeys.register(); AllKeys.register();
AllContainerTypes.registerScreenFactories(); // AllFluids.assignRenderLayers();
// AllTileEntities.registerRenderers(); AllBlockPartials.clientInit();
AllEntityTypes.registerRenderers();
getColorHandler().init();
AllFluids.assignRenderLayers();
PonderIndex.register(); PonderIndex.register();
PonderIndex.registerTags(); PonderIndex.registerTags();
@ -121,8 +112,6 @@ public class CreateClient {
if (resourceManager instanceof IReloadableResourceManager) if (resourceManager instanceof IReloadableResourceManager)
((IReloadableResourceManager) resourceManager).addReloadListener(new ResourceReloadHandler()); ((IReloadableResourceManager) resourceManager).addReloadListener(new ResourceReloadHandler());
AllBlockPartials.clientInit();
event.enqueueWork(() -> { event.enqueueWork(() -> {
CopperBacktankArmorLayer.register(); CopperBacktankArmorLayer.register();
}); });
@ -137,6 +126,14 @@ public class CreateClient {
.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) { public static void onModelBake(ModelBakeEvent event) {
Map<ResourceLocation, IBakedModel> modelRegistry = event.getModelRegistry(); Map<ResourceLocation, IBakedModel> modelRegistry = event.getModelRegistry();
PartialModel.onModelBake(event); PartialModel.onModelBake(event);
@ -151,14 +148,6 @@ public class CreateClient {
}); });
} }
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) { protected static ModelResourceLocation getItemModelLocation(Item item) {
return new ModelResourceLocation(item.getRegistryName(), "inventory"); return new ModelResourceLocation(item.getRegistryName(), "inventory");
} }
@ -224,13 +213,13 @@ public class CreateClient {
} }
public static void invalidateRenderers(@Nullable IWorld world) { public static void invalidateRenderers(@Nullable IWorld world) {
bufferCache.invalidate(); BUFFER_CACHE.invalidate();
if (world != null) { if (world != null) {
kineticRenderer.get(world) KINETIC_RENDERER.get(world)
.invalidate(); .invalidate();
} else { } else {
kineticRenderer.forEach(InstancedTileRenderer::invalidate); KINETIC_RENDERER.forEach(InstancedTileRenderer::invalidate);
} }
ContraptionRenderDispatcher.invalidateAll(); ContraptionRenderDispatcher.invalidateAll();

View file

@ -28,7 +28,7 @@ public class KineticDebugger {
if (!isActive()) { if (!isActive()) {
if (KineticTileEntityRenderer.rainbowMode) { if (KineticTileEntityRenderer.rainbowMode) {
KineticTileEntityRenderer.rainbowMode = false; KineticTileEntityRenderer.rainbowMode = false;
CreateClient.bufferCache.invalidate(); CreateClient.BUFFER_CACHE.invalidate();
} }
return; return;
} }
@ -44,7 +44,7 @@ public class KineticDebugger {
.getRenderShape(world, toOutline); .getRenderShape(world, toOutline);
if (te.getTheoreticalSpeed() != 0 && !shape.isEmpty()) if (te.getTheoreticalSpeed() != 0 && !shape.isEmpty())
CreateClient.outliner.chaseAABB("kineticSource", shape.getBoundingBox() CreateClient.OUTLINER.chaseAABB("kineticSource", shape.getBoundingBox()
.offset(toOutline)) .offset(toOutline))
.lineWidth(1 / 16f) .lineWidth(1 / 16f)
.colored(te.hasSource() ? ColorHelper.colorFromLong(te.network) : 0xffcc00); .colored(te.hasSource() ? ColorHelper.colorFromLong(te.network) : 0xffcc00);
@ -54,7 +54,7 @@ public class KineticDebugger {
Vector3d vec = Vector3d.of(Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis) Vector3d vec = Vector3d.of(Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis)
.getDirectionVec()); .getDirectionVec());
Vector3d center = VecHelper.getCenterOf(te.getPos()); Vector3d center = VecHelper.getCenterOf(te.getPos());
CreateClient.outliner.showLine("rotationAxis", center.add(vec), center.subtract(vec)) CreateClient.OUTLINER.showLine("rotationAxis", center.add(vec), center.subtract(vec))
.lineWidth(1 / 16f); .lineWidth(1 / 16f);
} }

View file

@ -15,12 +15,12 @@ public class TorquePropagator {
public void onLoadWorld(IWorld world) { public void onLoadWorld(IWorld world) {
networks.put(world, new HashMap<>()); 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) { public void onUnloadWorld(IWorld world) {
networks.remove(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) { public KineticNetwork getOrCreateNetworkFor(KineticTileEntity te) {

View file

@ -329,7 +329,7 @@ public abstract class KineticTileEntity extends SmartTileEntity
} }
public KineticNetwork getOrCreateNetwork() { public KineticNetwork getOrCreateNetwork() {
return Create.torquePropagator.getOrCreateNetworkFor(this); return Create.TORQUE_PROPAGATOR.getOrCreateNetworkFor(this);
} }
public boolean hasNetwork() { public boolean hasNetwork() {

View file

@ -48,7 +48,7 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
public static void renderRotatingKineticBlock(KineticTileEntity te, BlockState renderedState, MatrixStack ms, public static void renderRotatingKineticBlock(KineticTileEntity te, BlockState renderedState, MatrixStack ms,
IVertexBuilder buffer, int light) { IVertexBuilder buffer, int light) {
SuperByteBuffer superByteBuffer = CreateClient.bufferCache.renderBlockIn(KINETIC_TILE, renderedState); SuperByteBuffer superByteBuffer = CreateClient.BUFFER_CACHE.renderBlockIn(KINETIC_TILE, renderedState);
renderRotatingBuffer(te, superByteBuffer, ms, buffer, light); renderRotatingBuffer(te, superByteBuffer, ms, buffer, light);
} }
@ -120,7 +120,7 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
} }
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
return CreateClient.bufferCache.renderBlockIn(KINETIC_TILE, getRenderedBlockState(te)); return CreateClient.BUFFER_CACHE.renderBlockIn(KINETIC_TILE, getRenderedBlockState(te));
} }
} }

View file

@ -48,7 +48,7 @@ public class ValveHandleBlock extends HandCrankBlock {
if (worldIn.isRemote) if (worldIn.isRemote)
return ActionResultType.SUCCESS; return ActionResultType.SUCCESS;
BlockState newState = AllBlocks.DYED_VALVE_HANDLES.get(color.ordinal()) BlockState newState = AllBlocks.DYED_VALVE_HANDLES[color.ordinal()]
.getDefaultState() .getDefaultState()
.with(FACING, state.get(FACING)); .with(FACING, state.get(FACING));
if (newState != state) if (newState != state)

View file

@ -89,7 +89,7 @@ public class BeltDeployerCallbacks {
boolean centered = BeltHelper.isItemUpright(stack); boolean centered = BeltHelper.isItemUpright(stack);
copy.stack = stack; copy.stack = stack;
copy.locked = true; copy.locked = true;
copy.angle = centered ? 180 : Create.random.nextInt(360); copy.angle = centered ? 180 : Create.RANDOM.nextInt(360);
return copy; return copy;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());

View file

@ -16,7 +16,7 @@ public class MillstoneRenderer extends KineticTileEntityRenderer {
@Override @Override
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
return CreateClient.bufferCache.renderPartial(AllBlockPartials.MILLSTONE_COG, te.getBlockState()); return CreateClient.BUFFER_CACHE.renderPartial(AllBlockPartials.MILLSTONE_COG, te.getBlockState());
} }
} }

View file

@ -62,7 +62,7 @@ public class BeltPressingCallbacks {
boolean centered = BeltHelper.isItemUpright(stack); boolean centered = BeltHelper.isItemUpright(stack);
copy.stack = stack; copy.stack = stack;
copy.locked = true; copy.locked = true;
copy.angle = centered ? 180 : Create.random.nextInt(360); copy.angle = centered ? 180 : Create.RANDOM.nextInt(360);
return copy; return copy;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());

View file

@ -260,7 +260,7 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity {
ItemEntity created = 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.setDefaultPickupDelay();
created.setMotion(VecHelper.offsetRandomly(Vector3d.ZERO, Create.random, .05f)); created.setMotion(VecHelper.offsetRandomly(Vector3d.ZERO, Create.RANDOM, .05f));
world.addEntity(created); world.addEntity(created);
} }
item.shrink(1); item.shrink(1);

View file

@ -143,7 +143,7 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
BlockState state = te.getBlockState(); BlockState state = te.getBlockState();
if (state.get(FACING).getAxis().isHorizontal()) if (state.get(FACING).getAxis().isHorizontal())
return PartialBufferer.getFacing(AllBlockPartials.SHAFT_HALF, state.rotate(te.getWorld(), te.getPos(), Rotation.CLOCKWISE_180)); 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)); getRenderedBlockState(te));
} }

View file

@ -391,7 +391,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
byte[] byteArray = dataOutput.toByteArray(); byte[] byteArray = dataOutput.toByteArray();
int estimatedPacketSize = byteArray.length; int estimatedPacketSize = byteArray.length;
if (estimatedPacketSize > 2_000_000) { if (estimatedPacketSize > 2_000_000) {
Create.logger.warn("Could not send Contraption Spawn Data (Packet too big): " Create.LOGGER.warn("Could not send Contraption Spawn Data (Packet too big): "
+ getContraption().getType().id + " @" + getPositionVec() + " (" + getUniqueID().toString() + ")"); + getContraption().getType().id + " @" + getPositionVec() + " (" + getUniqueID().toString() + ")");
buffer.writeCompoundTag(new CompoundNBT()); buffer.writeCompoundTag(new CompoundNBT());
return; return;

View file

@ -1,5 +1,8 @@
package com.simibubi.create.content.contraptions.components.structureMovement; 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.AllBlocks;
import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.AllTags.AllBlockTags;
import com.simibubi.create.content.contraptions.components.actors.AttachedActorBlock; import com.simibubi.create.content.contraptions.components.actors.AttachedActorBlock;
@ -53,15 +56,118 @@ import net.minecraft.state.properties.AttachFace;
import net.minecraft.state.properties.BedPart; import net.minecraft.state.properties.BedPart;
import net.minecraft.state.properties.BellAttachment; import net.minecraft.state.properties.BellAttachment;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.state.properties.DoubleBlockHalf;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World; 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<MovementNecessaryCheck> MOVEMENT_NECESSARY_CHECKS = new ArrayList<>();
private static final List<MovementAllowedCheck> MOVEMENT_ALLOWED_CHECKS = new ArrayList<>();
private static final List<BrittleCheck> BRITTLE_CHECKS = new ArrayList<>();
private static final List<AttachedCheck> ATTACHED_CHECKS = new ArrayList<>();
private static final List<NotSupportiveCheck> 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)) if (isBrittle(state))
return true; return true;
if (state.getBlock() instanceof FenceGateBlock) if (state.getBlock() instanceof FenceGateBlock)
@ -75,7 +181,7 @@ public class BlockMovementTraits {
return true; 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(); Block block = state.getBlock();
if (block instanceof AbstractChassisBlock) if (block instanceof AbstractChassisBlock)
return true; return true;
@ -115,11 +221,7 @@ public class BlockMovementTraits {
return state.getPushReaction() != PushReaction.BLOCK; return state.getPushReaction() != PushReaction.BLOCK;
} }
/** private static boolean isBrittleFallback(BlockState state) {
* Brittle blocks will be collected first, as they may break when other blocks
* are removed before them
*/
public static boolean isBrittle(BlockState state) {
Block block = state.getBlock(); Block block = state.getBlock();
if (state.contains(BlockStateProperties.HANGING)) if (state.contains(BlockStateProperties.HANGING))
return true; return true;
@ -147,10 +249,7 @@ public class BlockMovementTraits {
return AllBlockTags.BRITTLE.tag.contains(block); return AllBlockTags.BRITTLE.tag.contains(block);
} }
/** private static boolean isBlockAttachedTowardsFallback(BlockState state, World world, BlockPos pos,
* Attached blocks will move if blocks they are attached to are moved
*/
public static boolean isBlockAttachedTowards(IBlockReader world, BlockPos pos, BlockState state,
Direction direction) { Direction direction) {
Block block = state.getBlock(); Block block = state.getBlock();
if (block instanceof LadderBlock) if (block instanceof LadderBlock)
@ -163,13 +262,15 @@ public class BlockMovementTraits {
return direction == Direction.DOWN; return direction == Direction.DOWN;
if (block instanceof AbstractPressurePlateBlock) if (block instanceof AbstractPressurePlateBlock)
return direction == Direction.DOWN; 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; return direction == Direction.DOWN;
}
if (block instanceof BedBlock) { if (block instanceof BedBlock) {
Direction facing = state.get(BedBlock.HORIZONTAL_FACING); Direction facing = state.get(BedBlock.HORIZONTAL_FACING);
if (state.get(BedBlock.PART) == BedPart.HEAD) { if (state.get(BedBlock.PART) == BedPart.HEAD)
facing = facing.getOpposite(); facing = facing.getOpposite();
}
return direction == facing; return direction == facing;
} }
if (block instanceof RedstoneLinkBlock) if (block instanceof RedstoneLinkBlock)
@ -226,16 +327,12 @@ public class BlockMovementTraits {
return FluidTankConnectivityHandler.isConnected(world, pos, pos.offset(direction)); return FluidTankConnectivityHandler.isConnected(world, pos, pos.offset(direction));
if (AllBlocks.STICKER.has(state) && state.get(StickerBlock.EXTENDED)) { if (AllBlocks.STICKER.has(state) && state.get(StickerBlock.EXTENDED)) {
return direction == state.get(StickerBlock.FACING) return direction == state.get(StickerBlock.FACING)
&& !notSupportive(world.getBlockState(pos.offset(direction)), direction.getOpposite()); && !isNotSupportive(world.getBlockState(pos.offset(direction)), direction.getOpposite());
} }
return false; return false;
} }
/** private static boolean isNotSupportiveFallback(BlockState state, Direction facing) {
* 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) {
if (AllBlocks.MECHANICAL_DRILL.has(state)) if (AllBlocks.MECHANICAL_DRILL.has(state))
return state.get(BlockStateProperties.FACING) == facing; return state.get(BlockStateProperties.FACING) == facing;
if (AllBlocks.MECHANICAL_BEARING.has(state)) if (AllBlocks.MECHANICAL_BEARING.has(state))
@ -266,4 +363,58 @@ public class BlockMovementTraits {
return isBrittle(state); 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);
}
}
} }

View file

@ -61,7 +61,7 @@ import com.simibubi.create.foundation.render.backend.light.EmptyLighter;
import com.simibubi.create.foundation.render.backend.light.GridAlignedBB; import com.simibubi.create.foundation.render.backend.light.GridAlignedBB;
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
import com.simibubi.create.foundation.utility.BlockFace; 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.Iterate;
import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.NBTHelper;
import com.simibubi.create.foundation.utility.NBTProcessors; 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.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.ChestBlock; import net.minecraft.block.ChestBlock;
import net.minecraft.block.DoorBlock;
import net.minecraft.block.IWaterLoggable; import net.minecraft.block.IWaterLoggable;
import net.minecraft.block.PressurePlateBlock; import net.minecraft.block.PressurePlateBlock;
import net.minecraft.block.material.PushReaction; import net.minecraft.block.material.PushReaction;
@ -87,7 +86,6 @@ import net.minecraft.nbt.ListNBT;
import net.minecraft.nbt.NBTUtil; import net.minecraft.nbt.NBTUtil;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.state.properties.ChestType; import net.minecraft.state.properties.ChestType;
import net.minecraft.state.properties.DoubleBlockHalf;
import net.minecraft.state.properties.PistonType; import net.minecraft.state.properties.PistonType;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
@ -212,7 +210,7 @@ public abstract class Contraption {
if (bounds == null) if (bounds == null)
bounds = new AxisAlignedBB(BlockPos.ZERO); bounds = new AxisAlignedBB(BlockPos.ZERO);
if (!BlockMovementTraits.isBrittle(world.getBlockState(pos))) if (!BlockMovementChecks.isBrittle(world.getBlockState(pos)))
frontier.add(pos); frontier.add(pos);
if (!addToInitialFrontier(world, pos, forcedDirection, frontier)) if (!addToInitialFrontier(world, pos, forcedDirection, frontier))
return false; return false;
@ -312,7 +310,7 @@ public abstract class Contraption {
if (isAnchoringBlockAt(pos)) if (isAnchoringBlockAt(pos))
return true; return true;
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
if (!BlockMovementTraits.movementNecessary(state, world, pos)) if (!BlockMovementChecks.isMovementNecessary(state, world, pos))
return true; return true;
if (!movementAllowed(state, world, pos)) if (!movementAllowed(state, world, pos))
throw AssemblyException.unmovableBlock(pos, state); throw AssemblyException.unmovableBlock(pos, state);
@ -336,7 +334,7 @@ public abstract class Contraption {
Direction offset = state.get(StickerBlock.FACING); Direction offset = state.get(StickerBlock.FACING);
BlockPos attached = pos.offset(offset); BlockPos attached = pos.offset(offset);
if (!visited.contains(attached) if (!visited.contains(attached)
&& !BlockMovementTraits.notSupportive(world.getBlockState(attached), offset.getOpposite())) && !BlockMovementChecks.isNotSupportive(world.getBlockState(attached), offset.getOpposite()))
frontier.add(attached); frontier.add(attached);
} }
@ -365,13 +363,6 @@ public abstract class Contraption {
if (isPistonHead(state)) if (isPistonHead(state))
movePistonHead(world, pos, frontier, visited, 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 // Cart assemblers attach themselves
BlockPos posDown = pos.down(); BlockPos posDown = pos.down();
BlockState stateBelow = world.getBlockState(posDown); BlockState stateBelow = world.getBlockState(posDown);
@ -395,24 +386,24 @@ public abstract class Contraption {
boolean wasVisited = visited.contains(offsetPos); boolean wasVisited = visited.contains(offsetPos);
boolean faceHasGlue = superglue.containsKey(offset); boolean faceHasGlue = superglue.containsKey(offset);
boolean blockAttachedTowardsFace = boolean blockAttachedTowardsFace =
BlockMovementTraits.isBlockAttachedTowards(world, offsetPos, blockState, offset.getOpposite()); BlockMovementChecks.isBlockAttachedTowards(blockState, world, offsetPos, offset.getOpposite());
boolean brittle = BlockMovementTraits.isBrittle(blockState); boolean brittle = BlockMovementChecks.isBrittle(blockState);
boolean canStick = !brittle && state.canStickTo(blockState) && blockState.canStickTo(state); boolean canStick = !brittle && state.canStickTo(blockState) && blockState.canStickTo(state);
if (canStick) { if (canStick) {
if (state.getPushReaction() == PushReaction.PUSH_ONLY if (state.getPushReaction() == PushReaction.PUSH_ONLY
|| blockState.getPushReaction() == PushReaction.PUSH_ONLY) { || blockState.getPushReaction() == PushReaction.PUSH_ONLY) {
canStick = false; canStick = false;
} }
if (BlockMovementTraits.notSupportive(state, offset)) { if (BlockMovementChecks.isNotSupportive(state, offset)) {
canStick = false; canStick = false;
} }
if (BlockMovementTraits.notSupportive(blockState, offset.getOpposite())) { if (BlockMovementChecks.isNotSupportive(blockState, offset.getOpposite())) {
canStick = false; canStick = false;
} }
} }
if (!wasVisited && (canStick || blockAttachedTowardsFace || faceHasGlue if (!wasVisited && (canStick || blockAttachedTowardsFace || faceHasGlue
|| (offset == forcedDirection && !BlockMovementTraits.notSupportive(state, forcedDirection)))) || (offset == forcedDirection && !BlockMovementChecks.isNotSupportive(state, forcedDirection))))
frontier.add(offsetPos); frontier.add(offsetPos);
if (faceHasGlue) if (faceHasGlue)
addGlue(superglue.get(offset)); addGlue(superglue.get(offset));
@ -674,7 +665,7 @@ public abstract class Contraption {
} }
protected boolean movementAllowed(BlockState state, World world, BlockPos pos) { 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) { protected boolean isAnchoringBlockAt(BlockPos pos) {
@ -944,7 +935,7 @@ public abstract class Contraption {
for (Iterator<BlockInfo> iterator = blocks.values() for (Iterator<BlockInfo> iterator = blocks.values()
.iterator(); iterator.hasNext();) { .iterator(); iterator.hasNext();) {
BlockInfo block = iterator.next(); BlockInfo block = iterator.next();
if (brittles != BlockMovementTraits.isBrittle(block.state)) if (brittles != BlockMovementChecks.isBrittle(block.state))
continue; continue;
BlockPos add = block.pos.add(anchor) BlockPos add = block.pos.add(anchor)
@ -974,17 +965,14 @@ public abstract class Contraption {
// continue; // continue;
int flags = BlockFlags.IS_MOVING | BlockFlags.DEFAULT; int flags = BlockFlags.IS_MOVING | BlockFlags.DEFAULT;
world.notifyBlockUpdate(add, block.state, Blocks.AIR.getDefaultState(), flags); 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); 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) { public void addBlocksToWorld(World world, StructureTransform transform) {
for (boolean nonBrittles : Iterate.trueAndFalse) { for (boolean nonBrittles : Iterate.trueAndFalse) {
for (BlockInfo block : blocks.values()) { for (BlockInfo block : blocks.values()) {
if (nonBrittles == BlockMovementTraits.isBrittle(block.state)) if (nonBrittles == BlockMovementChecks.isBrittle(block.state))
continue; continue;
BlockPos targetPos = transform.apply(block.pos); BlockPos targetPos = transform.apply(block.pos);
@ -1235,7 +1223,7 @@ public abstract class Contraption {
throw new IllegalStateException("Impossible axis"); throw new IllegalStateException("Impossible axis");
} }
public static float getMaxDistSqr(Set<BlockPos> blocks, Coordinate one, Coordinate other) { public static float getMaxDistSqr(Set<BlockPos> blocks, ICoordinate one, ICoordinate other) {
float maxDistSq = -1; float maxDistSq = -1;
for (BlockPos pos : blocks) { for (BlockPos pos : blocks) {
float a = one.get(pos); float a = one.get(pos);

View file

@ -35,7 +35,7 @@ public class ChassisRangeDisplay {
public Entry(ChassisTileEntity te) { public Entry(ChassisTileEntity te) {
this.te = te; this.te = te;
timer = DISPLAY_TIME; timer = DISPLAY_TIME;
CreateClient.outliner.showCluster(getOutlineKey(), createSelection(te)) CreateClient.OUTLINER.showCluster(getOutlineKey(), createSelection(te))
.colored(0xFFFFFF) .colored(0xFFFFFF)
.disableNormals() .disableNormals()
.lineWidth(1 / 16f) .lineWidth(1 / 16f)
@ -97,7 +97,7 @@ public class ChassisRangeDisplay {
Entry entry = entries.get(pos); Entry entry = entries.get(pos);
if (tickEntry(entry, hasWrench)) if (tickEntry(entry, hasWrench))
iterator.remove(); iterator.remove();
CreateClient.outliner.keep(entry.getOutlineKey()); CreateClient.OUTLINER.keep(entry.getOutlineKey());
} }
for (Iterator<GroupEntry> iterator = groupEntries.iterator(); iterator.hasNext();) { for (Iterator<GroupEntry> iterator = groupEntries.iterator(); iterator.hasNext();) {
@ -107,7 +107,7 @@ public class ChassisRangeDisplay {
if (group == lastHoveredGroup) if (group == lastHoveredGroup)
lastHoveredGroup = null; lastHoveredGroup = null;
} }
CreateClient.outliner.keep(group.getOutlineKey()); CreateClient.OUTLINER.keep(group.getOutlineKey());
} }
if (!hasWrench) if (!hasWrench)
@ -173,9 +173,9 @@ public class ChassisRangeDisplay {
GroupEntry hoveredGroup = new GroupEntry(chassis); GroupEntry hoveredGroup = new GroupEntry(chassis);
for (ChassisTileEntity included : hoveredGroup.includedTEs) 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(); groupEntries.clear();
entries.clear(); entries.clear();
groupEntries.add(hoveredGroup); groupEntries.add(hoveredGroup);
@ -186,7 +186,7 @@ public class ChassisRangeDisplay {
BlockPos pos = chassis.getPos(); BlockPos pos = chassis.getPos();
GroupEntry entry = getExistingGroupForPos(pos); GroupEntry entry = getExistingGroupForPos(pos);
if (entry != null) if (entry != null)
CreateClient.outliner.remove(entry.getOutlineKey()); CreateClient.OUTLINER.remove(entry.getOutlineKey());
groupEntries.clear(); groupEntries.clear();
entries.clear(); entries.clear();

View file

@ -11,7 +11,7 @@ import java.util.Queue;
import java.util.Set; import java.util.Set;
import com.simibubi.create.AllBlocks; 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.config.AllConfigs;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
@ -165,14 +165,14 @@ public class ChassisTileEntity extends SmartTileEntity {
break; break;
// Ignore replaceable Blocks and Air-like // Ignore replaceable Blocks and Air-like
if (!BlockMovementTraits.movementNecessary(currentState, world, current)) if (!BlockMovementChecks.isMovementNecessary(currentState, world, current))
break; break;
if (BlockMovementTraits.isBrittle(currentState)) if (BlockMovementChecks.isBrittle(currentState))
break; break;
positions.add(current); positions.add(current);
if (BlockMovementTraits.notSupportive(currentState, facing)) if (BlockMovementChecks.isNotSupportive(currentState, facing))
break; break;
} }
} }
@ -206,9 +206,9 @@ public class ChassisTileEntity extends SmartTileEntity {
continue; continue;
if (!searchPos.withinDistance(pos, chassisRange + .5f)) if (!searchPos.withinDistance(pos, chassisRange + .5f))
continue; continue;
if (!BlockMovementTraits.movementNecessary(searchedState, world, searchPos)) if (!BlockMovementChecks.isMovementNecessary(searchedState, world, searchPos))
continue; continue;
if (BlockMovementTraits.isBrittle(searchedState)) if (BlockMovementChecks.isBrittle(searchedState))
continue; continue;
localVisited.add(searchPos); localVisited.add(searchPos);
@ -220,7 +220,7 @@ public class ChassisTileEntity extends SmartTileEntity {
continue; continue;
if (searchPos.equals(pos) && offset != facing) if (searchPos.equals(pos) && offset != facing)
continue; continue;
if (BlockMovementTraits.notSupportive(searchedState, offset)) if (BlockMovementChecks.isNotSupportive(searchedState, offset))
continue; continue;
localFrontier.add(searchPos.offset(offset)); localFrontier.add(searchPos.offset(offset));

View file

@ -9,7 +9,7 @@ import com.simibubi.create.AllEntityTypes;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.AllSoundEvents; import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock; 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.bearing.BearingBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock; import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
import com.simibubi.create.content.schematics.ISpecialEntityItemRequirement; 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) { public static boolean isValidFace(World world, BlockPos pos, Direction direction) {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
if (BlockMovementTraits.isBlockAttachedTowards(world, pos, state, direction)) if (BlockMovementChecks.isBlockAttachedTowards(state, world, pos, direction))
return true; return true;
if (!BlockMovementTraits.movementNecessary(state, world, pos)) if (!BlockMovementChecks.isMovementNecessary(state, world, pos))
return false; return false;
if (BlockMovementTraits.notSupportive(state, direction)) if (BlockMovementChecks.isNotSupportive(state, direction))
return false; return false;
return true; return true;
} }

View file

@ -15,7 +15,7 @@ import java.util.Queue;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException; 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.ContraptionLighter;
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionType; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionType;
import com.simibubi.create.content.contraptions.components.structureMovement.TranslatingContraption; import com.simibubi.create.content.contraptions.components.structureMovement.TranslatingContraption;
@ -169,13 +169,13 @@ public class PistonContraption extends TranslatingContraption {
if (!world.isBlockPresent(currentPos)) if (!world.isBlockPresent(currentPos))
throw AssemblyException.unloadedChunk(currentPos); throw AssemblyException.unloadedChunk(currentPos);
BlockState state = world.getBlockState(currentPos); BlockState state = world.getBlockState(currentPos);
if (!BlockMovementTraits.movementNecessary(state, world, currentPos)) if (!BlockMovementChecks.isMovementNecessary(state, world, currentPos))
return true; return true;
if (BlockMovementTraits.isBrittle(state) && !(state.getBlock() instanceof CarpetBlock)) if (BlockMovementChecks.isBrittle(state) && !(state.getBlock() instanceof CarpetBlock))
return true; return true;
if (isPistonHead(state) && state.get(FACING) == direction.getOpposite()) if (isPistonHead(state) && state.get(FACING) == direction.getOpposite())
return true; return true;
if (!BlockMovementTraits.movementAllowed(state, world, currentPos)) if (!BlockMovementChecks.isMovementAllowed(state, world, currentPos))
if (retracting) if (retracting)
return true; return true;
else else
@ -183,7 +183,7 @@ public class PistonContraption extends TranslatingContraption {
if (retracting && state.getPushReaction() == PushReaction.PUSH_ONLY) if (retracting && state.getPushReaction() == PushReaction.PUSH_ONLY)
return true; return true;
frontier.add(currentPos); frontier.add(currentPos);
if (BlockMovementTraits.notSupportive(state, orientation)) if (BlockMovementChecks.isNotSupportive(state, orientation))
return true; return true;
} }
return true; return true;

View file

@ -31,12 +31,12 @@ public class PulleyRenderer extends AbstractPulleyRenderer {
@Override @Override
protected SuperByteBuffer renderRope(KineticTileEntity te) { protected SuperByteBuffer renderRope(KineticTileEntity te) {
return CreateClient.bufferCache.renderBlock(AllBlocks.ROPE.getDefaultState()); return CreateClient.BUFFER_CACHE.renderBlock(AllBlocks.ROPE.getDefaultState());
} }
@Override @Override
protected SuperByteBuffer renderMagnet(KineticTileEntity te) { protected SuperByteBuffer renderMagnet(KineticTileEntity te) {
return CreateClient.bufferCache.renderBlock(AllBlocks.PULLEY_MAGNET.getDefaultState()); return CreateClient.BUFFER_CACHE.renderBlock(AllBlocks.PULLEY_MAGNET.getDefaultState());
} }
@Override @Override

View file

@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.pu
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.components.structureMovement.AssemblyException; 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.ContraptionCollider; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionCollider;
import com.simibubi.create.content.contraptions.components.structureMovement.ControlledContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.ControlledContraptionEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.piston.LinearActuatorTileEntity; import com.simibubi.create.content.contraptions.components.structureMovement.piston.LinearActuatorTileEntity;
@ -186,9 +186,9 @@ public class PulleyTileEntity extends LinearActuatorTileEntity {
BlockPos posBelow = pos.down((int) (offset + getMovementSpeed()) + 1); BlockPos posBelow = pos.down((int) (offset + getMovementSpeed()) + 1);
BlockState state = world.getBlockState(posBelow); BlockState state = world.getBlockState(posBelow);
if (!BlockMovementTraits.movementNecessary(state, world, posBelow)) if (!BlockMovementChecks.isMovementNecessary(state, world, posBelow))
return; return;
if (BlockMovementTraits.isBrittle(state)) if (BlockMovementChecks.isBrittle(state))
return; return;
disassemble(); disassemble();

View file

@ -124,7 +124,7 @@ public class ContraptionRenderDispatcher {
public static void renderStructure(World world, Contraption c, MatrixStack ms, MatrixStack msLocal, public static void renderStructure(World world, Contraption c, MatrixStack ms, MatrixStack msLocal,
IRenderTypeBuffer buffer) { IRenderTypeBuffer buffer) {
SuperByteBufferCache bufferCache = CreateClient.bufferCache; SuperByteBufferCache bufferCache = CreateClient.BUFFER_CACHE;
List<RenderType> blockLayers = RenderType.getBlockLayers(); List<RenderType> blockLayers = RenderType.getBlockLayers();
buffer.getBuffer(RenderType.getSolid()); buffer.getBuffer(RenderType.getSolid());

View file

@ -124,7 +124,7 @@ public class CouplingHandler {
while (true) { while (true) {
if (safetyCount-- <= 0) { if (safetyCount-- <= 0) {
Create.logger.warn("Infinite loop in coupling iteration"); Create.LOGGER.warn("Infinite loop in coupling iteration");
return false; return false;
} }

View file

@ -228,13 +228,13 @@ public class CouplingRenderer {
int color = ColorHelper.mixColors(0xabf0e9, 0xee8572, (float) MathHelper 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) CreateClient.OUTLINER.showLine(mainCart.getEntityId() + "", mainCenter, connectedCenter)
.colored(color) .colored(color)
.lineWidth(1 / 8f); .lineWidth(1 / 8f);
Vector3d point = mainCart.getPositionVec() Vector3d point = mainCart.getPositionVec()
.add(0, yOffset, 0); .add(0, yOffset, 0);
CreateClient.outliner.showLine(mainCart.getEntityId() + "_dot", point, point.add(0, 1 / 128f, 0)) CreateClient.OUTLINER.showLine(mainCart.getEntityId() + "_dot", point, point.add(0, 1 / 128f, 0))
.colored(0xffffff) .colored(0xffffff)
.lineWidth(1 / 4f); .lineWidth(1 / 4f);
} }

View file

@ -197,7 +197,7 @@ public class MinecartController implements INBTSerializable<CompoundNBT> {
while (true) { while (true) {
if (safetyCount-- <= 0) { if (safetyCount-- <= 0) {
Create.logger.warn("Infinite loop in coupling iteration"); Create.LOGGER.warn("Infinite loop in coupling iteration");
return; return;
} }
cartsToFlip.add(current); cartsToFlip.add(current);

View file

@ -148,7 +148,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren
FluidTransportBehaviour transport = TileEntityBehaviour.get(world, neighbourPos, FluidTransportBehaviour.TYPE); FluidTransportBehaviour transport = TileEntityBehaviour.get(world, neighbourPos, FluidTransportBehaviour.TYPE);
BracketedTileEntityBehaviour bracket = TileEntityBehaviour.get(world, neighbourPos, BracketedTileEntityBehaviour.TYPE); BracketedTileEntityBehaviour bracket = TileEntityBehaviour.get(world, neighbourPos, BracketedTileEntityBehaviour.TYPE);
if (isPipe(neighbour)) if (isPipe(neighbour))
return bracket == null || !bracket.isBacketPresent() return bracket == null || !bracket.isBracketPresent()
|| FluidPropagator.getStraightPipeAxis(neighbour) == direction.getAxis(); || FluidPropagator.getStraightPipeAxis(neighbour) == direction.getAxis();
if (transport == null) if (transport == null)
return false; return false;
@ -228,7 +228,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren
IBlockDisplayReader world, BlockPos pos) { IBlockDisplayReader world, BlockPos pos) {
BracketedTileEntityBehaviour bracket = TileEntityBehaviour.get(world, pos, BracketedTileEntityBehaviour.TYPE); BracketedTileEntityBehaviour bracket = TileEntityBehaviour.get(world, pos, BracketedTileEntityBehaviour.TYPE);
if (bracket != null && bracket.isBacketPresent()) if (bracket != null && bracket.isBracketPresent())
return state; return state;
// Update sides that are not ignored // Update sides that are not ignored

View file

@ -42,7 +42,7 @@ import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@EventBusSubscriber(value = Dist.CLIENT) @EventBusSubscriber(value = Dist.CLIENT)
public class GoggleOverlayRenderer { public class GoggleOverlayRenderer {
private static final Map<Object, OutlineEntry> outlines = CreateClient.outliner.getOutlines(); private static final Map<Object, OutlineEntry> outlines = CreateClient.OUTLINER.getOutlines();
@SubscribeEvent @SubscribeEvent
public static void lookingAtBlocksThroughGogglesShowsTooltip(RenderGameOverlayEvent.Post event) { public static void lookingAtBlocksThroughGogglesShowsTooltip(RenderGameOverlayEvent.Post event) {

View file

@ -35,7 +35,7 @@ public class AirFlowParticle extends SimpleAnimatedParticle {
this.maxAge = 40; this.maxAge = 40;
canCollide = false; canCollide = false;
selectSprite(7); 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.setPosition(posX + offset.x, posY + offset.y, posZ + offset.z);
this.prevPosX = posX; this.prevPosX = posX;
this.prevPosY = posY; this.prevPosY = posY;

View file

@ -39,9 +39,9 @@ public class AirParticle extends SimpleAnimatedParticle {
targetZ = (float) (z + dz); targetZ = (float) (z + dz);
drag = data.drag; drag = data.drag;
twirlRadius = Create.random.nextFloat() / 6; twirlRadius = Create.RANDOM.nextFloat() / 6;
twirlAngleOffset = Create.random.nextFloat() * 360; twirlAngleOffset = Create.RANDOM.nextFloat() * 360;
twirlAxis = Create.random.nextBoolean() ? Axis.X : Axis.Z; twirlAxis = Create.RANDOM.nextBoolean() ? Axis.X : Axis.Z;
// speed in m/ticks // speed in m/ticks
maxAge = Math.min((int) (new Vector3d(dx, dy, dz).length() / data.speed), 60); maxAge = Math.min((int) (new Vector3d(dx, dy, dz).length() / data.speed), 60);

View file

@ -126,7 +126,7 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
} }
if (success) if (success)
worldIn.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f, worldIn.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f,
1f + Create.random.nextFloat()); 1f + Create.RANDOM.nextFloat());
te.onEmptied(); te.onEmptied();
} catch (TileEntityException e) { } catch (TileEntityException e) {
} }

View file

@ -46,7 +46,7 @@ public enum HeatCondition {
if (heatCondition.serialize() if (heatCondition.serialize()
.equals(name)) .equals(name))
return heatCondition; return heatCondition;
Create.logger.warn("Tried to deserialize invalid heat condition: \"" + name + "\""); Create.LOGGER.warn("Tried to deserialize invalid heat condition: \"" + name + "\"");
return NONE; return NONE;
} }

View file

@ -85,7 +85,7 @@ public abstract class ProcessingRecipe<T extends IInventory> implements IRecipe<
private void validate(String recipeTypeName) { private void validate(String recipeTypeName) {
String messageHeader = "Your custom " + recipeTypeName + " recipe (" + id.toString() + ")"; String messageHeader = "Your custom " + recipeTypeName + " recipe (" + id.toString() + ")";
Logger logger = Create.logger; Logger logger = Create.LOGGER;
int ingredientCount = ingredients.size(); int ingredientCount = ingredients.size();
int outputCount = results.size(); int outputCount = results.size();

View file

@ -53,7 +53,7 @@ public class SpeedControllerRenderer extends SmartTileEntityRenderer<SpeedContro
} }
private SuperByteBuffer getRotatedModel(SpeedControllerTileEntity te) { private SuperByteBuffer getRotatedModel(SpeedControllerTileEntity te) {
return CreateClient.bufferCache.renderBlockIn(KineticTileEntityRenderer.KINETIC_TILE, return CreateClient.BUFFER_CACHE.renderBlockIn(KineticTileEntityRenderer.KINETIC_TILE,
KineticTileEntityRenderer.shaft(KineticTileEntityRenderer.getRotationAxisOf(te))); KineticTileEntityRenderer.shaft(KineticTileEntityRenderer.getRotationAxisOf(te)));
} }

View file

@ -274,7 +274,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE<BeltTileEnt
}); });
if (success.isTrue()) if (success.isTrue())
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f, world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f,
1f + Create.random.nextFloat()); 1f + Create.RANDOM.nextFloat());
} }
if (isShaft) { if (isShaft) {

View file

@ -143,7 +143,7 @@ public class BeltRenderer extends SafeTileEntityRenderer<BeltTileEntity> {
return stack; 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); KineticTileEntityRenderer.standardKineticRotationTransform(superBuffer, te, light).renderInto(ms, vb);
} }
} }

View file

@ -47,7 +47,7 @@ public class BeltConnectorItem extends BlockItem {
@Override @Override
public void fillItemGroup(ItemGroup p_150895_1_, NonNullList<ItemStack> p_150895_2_) { public void fillItemGroup(ItemGroup p_150895_1_, NonNullList<ItemStack> p_150895_2_) {
if (p_150895_1_ == Create.baseCreativeTab) if (p_150895_1_ == Create.BASE_CREATIVE_TAB)
return; return;
super.fillItemGroup(p_150895_1_, p_150895_2_); super.fillItemGroup(p_150895_1_, p_150895_2_);
} }

View file

@ -21,7 +21,7 @@ import net.minecraftforge.client.model.data.ModelProperty;
public class BracketedKineticBlockModel extends BakedModelWrapper<IBakedModel> { public class BracketedKineticBlockModel extends BakedModelWrapper<IBakedModel> {
private static ModelProperty<BracketedModelData> BRACKET_PROPERTY = new ModelProperty<>(); private static final ModelProperty<BracketedModelData> BRACKET_PROPERTY = new ModelProperty<>();
public BracketedKineticBlockModel(IBakedModel template) { public BracketedKineticBlockModel(IBakedModel template) {
super(template); super(template);

View file

@ -74,7 +74,7 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour {
tileEntity.notifyUpdate(); tileEntity.notifyUpdate();
} }
public boolean isBacketPresent() { public boolean isBracketPresent() {
return getBracket() != Blocks.AIR.getDefaultState(); return getBracket() != Blocks.AIR.getDefaultState();
} }

View file

@ -71,11 +71,11 @@ public interface IWrenchable {
} }
default void playRemoveSound(World world, BlockPos pos) { 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) { 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) { default BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) {

View file

@ -62,9 +62,9 @@ public class CopperBacktankArmorLayer<T extends LivingEntity, M extends EntityMo
.with(CopperBacktankBlock.HORIZONTAL_FACING, Direction.SOUTH); .with(CopperBacktankBlock.HORIZONTAL_FACING, Direction.SOUTH);
RenderType renderType = RenderType.getCutout(); RenderType renderType = RenderType.getCutout();
SuperByteBuffer backtank = CreateClient.bufferCache.renderBlock(renderedState); SuperByteBuffer backtank = CreateClient.BUFFER_CACHE.renderBlock(renderedState);
SuperByteBuffer cogs = SuperByteBuffer cogs =
CreateClient.bufferCache.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, renderedState); CreateClient.BUFFER_CACHE.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, renderedState);
model.bipedBody.rotate(ms); model.bipedBody.rotate(ms);
ms.translate(-1 / 2f, 10 / 16f, 1f); ms.translate(-1 / 2f, 10 / 16f, 1f);

View file

@ -27,7 +27,7 @@ public class CopperBacktankRenderer extends KineticTileEntityRenderer {
super.renderSafe(te, partialTicks, ms, buffer, light, overlay); super.renderSafe(te, partialTicks, ms, buffer, light, overlay);
SuperByteBuffer cogs = SuperByteBuffer cogs =
CreateClient.bufferCache.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, te.getBlockState()); CreateClient.BUFFER_CACHE.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, te.getBlockState());
cogs.matrixStacker() cogs.matrixStacker()
.centre() .centre()
.rotateY(180 + AngleHelper.horizontalAngle(te.getBlockState() .rotateY(180 + AngleHelper.horizontalAngle(te.getBlockState()

View file

@ -42,7 +42,7 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName
int max = getMaxAir(); int max = getMaxAir();
if (world.isRemote) { if (world.isRemote) {
Vector3d centerOf = VecHelper.getCenterOf(pos); 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); Vector3d m = centerOf.subtract(v);
if (airLevel != max) if (airLevel != max)
world.addParticle(new AirParticleData(1, .05f), v.x, v.y, v.z, m.x, m.y, m.z); world.addParticle(new AirParticleData(1, .05f), v.x, v.y, v.z, m.x, m.y, m.z);

View file

@ -90,7 +90,7 @@ public class ZapperRenderHandler {
return; return;
cachedBeams.forEach(beam -> { cachedBeams.forEach(beam -> {
CreateClient.outliner.endChasingLine(beam, beam.start, beam.end, 1 - beam.itensity) CreateClient.OUTLINER.endChasingLine(beam, beam.start, beam.end, 1 - beam.itensity)
.disableNormals() .disableNormals()
.colored(0xffffff) .colored(0xffffff)
.lineWidth(beam.itensity * 1 / 8f); .lineWidth(beam.itensity * 1 / 8f);

View file

@ -31,7 +31,7 @@ public class WorldshaperRenderHandler {
if (renderedPositions == null) if (renderedPositions == null)
return; return;
CreateClient.outliner.showCluster("terrainZapper", renderedPositions.get()) CreateClient.OUTLINER.showCluster("terrainZapper", renderedPositions.get())
.colored(0xbfbfbf) .colored(0xbfbfbf)
.disableNormals() .disableNormals()
.lineWidth(1 / 32f) .lineWidth(1 / 32f)

View file

@ -67,12 +67,12 @@ public class RedstoneLinkNetworkHandler {
public void onLoadWorld(IWorld world) { public void onLoadWorld(IWorld world) {
connections.put(world, new HashMap<>()); 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) { public void onUnloadWorld(IWorld world) {
connections.remove(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<LinkBehaviour> getNetworkOf(LinkBehaviour actor) { public Set<LinkBehaviour> getNetworkOf(LinkBehaviour actor) {
@ -144,7 +144,7 @@ public class RedstoneLinkNetworkHandler {
public Map<Pair<Frequency, Frequency>, Set<LinkBehaviour>> networksIn(IWorld world) { public Map<Pair<Frequency, Frequency>, Set<LinkBehaviour>> networksIn(IWorld world) {
if (!connections.containsKey(world)) { if (!connections.containsKey(world)) {
Create.logger.warn( Create.LOGGER.warn(
"Tried to Access unprepared network space of " + WorldHelper.getDimensionID(world)); "Tried to Access unprepared network space of " + WorldHelper.getDimensionID(world));
return new HashMap<>(); return new HashMap<>();
} }

View file

@ -313,12 +313,12 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor
return; return;
AirParticleData airParticleData = new AirParticleData(drag, motion); AirParticleData airParticleData = new AirParticleData(drag, motion);
Vector3d origin = Vector3d.of(pos); Vector3d origin = Vector3d.of(pos);
float xOff = Create.random.nextFloat() * .5f + .25f; float xOff = Create.RANDOM.nextFloat() * .5f + .25f;
float zOff = Create.random.nextFloat() * .5f + .25f; float zOff = Create.RANDOM.nextFloat() * .5f + .25f;
Vector3d v = origin.add(xOff, verticalStart, zOff); Vector3d v = origin.add(xOff, verticalStart, zOff);
Vector3d d = origin.add(xOff, verticalEnd, zOff) Vector3d d = origin.add(xOff, verticalEnd, zOff)
.subtract(v); .subtract(v);
if (Create.random.nextFloat() < 2 * motion) if (Create.RANDOM.nextFloat() < 2 * motion)
world.addOptionalParticle(airParticleData, v.x, v.y, v.z, d.x, d.y, d.z); world.addOptionalParticle(airParticleData, v.x, v.y, v.z, d.x, d.y, d.z);
} }

View file

@ -210,7 +210,7 @@ public class EjectorTargetHandler {
ClientWorld world = mc.world; ClientWorld world = mc.world;
AxisAlignedBB bb = new AxisAlignedBB(0, 0, 0, 1, 0, 1).offset(currentSelection.add(-validX, -yDiff, -validZ)); AxisAlignedBB bb = new AxisAlignedBB(0, 0, 0, 1, 0, 1).offset(currentSelection.add(-validX, -yDiff, -validZ));
CreateClient.outliner.chaseAABB("valid", bb) CreateClient.OUTLINER.chaseAABB("valid", bb)
.colored(intColor) .colored(intColor)
.lineWidth(1 / 16f); .lineWidth(1 / 16f);
@ -260,7 +260,7 @@ public class EjectorTargetHandler {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
VoxelShape shape = state.getShape(world, pos); VoxelShape shape = state.getShape(world, pos);
AxisAlignedBB boundingBox = shape.isEmpty() ? new AxisAlignedBB(BlockPos.ZERO) : shape.getBoundingBox(); AxisAlignedBB boundingBox = shape.isEmpty() ? new AxisAlignedBB(BlockPos.ZERO) : shape.getBoundingBox();
CreateClient.outliner.showAABB("target", boundingBox.offset(pos)) CreateClient.OUTLINER.showAABB("target", boundingBox.offset(pos))
.colored(0xffcb74) .colored(0xffcb74)
.lineWidth(1 / 16f); .lineWidth(1 / 16f);
} }

View file

@ -53,7 +53,7 @@ public class SharedDepotBlockMethods {
player.inventory.placeItemBackInInventory(world, mainItemStack); player.inventory.placeItemBackInInventory(world, mainItemStack);
behaviour.removeHeldItem(); behaviour.removeHeldItem();
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f, world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f,
1f + Create.random.nextFloat()); 1f + Create.RANDOM.nextFloat());
} }
ItemStackHandler outputs = behaviour.processingOutputBuffer; ItemStackHandler outputs = behaviour.processingOutputBuffer;
for (int i = 0; i < outputs.getSlots(); i++) for (int i = 0; i < outputs.getSlots(); i++)

View file

@ -7,6 +7,7 @@ import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.inventory.container.Slot; import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
@ -19,8 +20,8 @@ public class AdjustableCrateContainer extends Container {
public PlayerInventory playerInventory; public PlayerInventory playerInventory;
public boolean doubleCrate; public boolean doubleCrate;
public AdjustableCrateContainer(int id, PlayerInventory inv, PacketBuffer extraData) { public AdjustableCrateContainer(ContainerType<?> type, int id, PlayerInventory inv, PacketBuffer extraData) {
super(AllContainerTypes.FLEXCRATE.type, id); super(type, id);
ClientWorld world = Minecraft.getInstance().world; ClientWorld world = Minecraft.getInstance().world;
TileEntity tileEntity = world.getTileEntity(extraData.readBlockPos()); TileEntity tileEntity = world.getTileEntity(extraData.readBlockPos());
this.playerInventory = inv; this.playerInventory = inv;
@ -31,13 +32,17 @@ public class AdjustableCrateContainer extends Container {
} }
} }
public AdjustableCrateContainer(int id, PlayerInventory inv, AdjustableCrateTileEntity te) { public AdjustableCrateContainer(ContainerType<?> type, int id, PlayerInventory inv, AdjustableCrateTileEntity te) {
super(AllContainerTypes.FLEXCRATE.type, id); super(type, id);
this.te = te; this.te = te;
this.playerInventory = inv; this.playerInventory = inv;
init(); init();
} }
public static AdjustableCrateContainer create(int id, PlayerInventory inv, AdjustableCrateTileEntity te) {
return new AdjustableCrateContainer(AllContainerTypes.FLEXCRATE.get(), id, inv, te);
}
private void init() { private void init() {
doubleCrate = te.isDoubleCrate(); doubleCrate = te.isDoubleCrate();
int x = doubleCrate ? 51 : 123; int x = doubleCrate ? 51 : 123;

View file

@ -72,7 +72,7 @@ public class AdjustableCrateTileEntity extends CrateTileEntity implements INamed
@Override @Override
public Container createMenu(int id, PlayerInventory inventory, PlayerEntity player) { public Container createMenu(int id, PlayerInventory inventory, PlayerEntity player) {
return new AdjustableCrateContainer(id, inventory, this); return AdjustableCrateContainer.create(id, inventory, this);
} }
public AdjustableCrateTileEntity getOtherCrate() { public AdjustableCrateTileEntity getOtherCrate() {

View file

@ -195,7 +195,7 @@ public class ArmInteractionPointHandler {
continue; continue;
int color = point.mode == Mode.DEPOSIT ? 0xffcb74 : 0x4f8a8b; int color = point.mode == Mode.DEPOSIT ? 0xffcb74 : 0x4f8a8b;
CreateClient.outliner.showAABB(point, shape.getBoundingBox() CreateClient.OUTLINER.showAABB(point, shape.getBoundingBox()
.offset(pos)) .offset(pos))
.colored(color) .colored(color)
.lineWidth(1 / 16f); .lineWidth(1 / 16f);

View file

@ -352,7 +352,7 @@ public class ArmTileEntity extends KineticTileEntity {
if (!prevHeld.isItemEqual(heldItem)) if (!prevHeld.isItemEqual(heldItem))
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, .125f, world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, .125f,
.5f + Create.random.nextFloat() * .25f); .5f + Create.RANDOM.nextFloat() * .25f);
return; return;
} }

View file

@ -9,6 +9,7 @@ import com.simibubi.create.foundation.utility.Pair;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ClickType; import net.minecraft.inventory.container.ClickType;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.inventory.container.Slot; import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
@ -30,12 +31,16 @@ public class AttributeFilterContainer extends AbstractFilterContainer {
WhitelistMode whitelistMode; WhitelistMode whitelistMode;
List<Pair<ItemAttribute, Boolean>> selectedAttributes; List<Pair<ItemAttribute, Boolean>> selectedAttributes;
public AttributeFilterContainer(int id, PlayerInventory inv, PacketBuffer extraData) { public AttributeFilterContainer(ContainerType<?> type, int id, PlayerInventory inv, PacketBuffer extraData) {
super(AllContainerTypes.ATTRIBUTE_FILTER.type, id, inv, extraData); super(type, id, inv, extraData);
} }
public AttributeFilterContainer(int id, PlayerInventory inv, ItemStack stack) { public AttributeFilterContainer(ContainerType<?> type, int id, PlayerInventory inv, ItemStack stack) {
super(AllContainerTypes.ATTRIBUTE_FILTER.type, id, inv, 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) { public void appendSelectedAttribute(ItemAttribute itemAttribute, boolean inverted) {

View file

@ -3,6 +3,7 @@ package com.simibubi.create.content.logistics.item.filter;
import com.simibubi.create.AllContainerTypes; import com.simibubi.create.AllContainerTypes;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
@ -14,12 +15,16 @@ public class FilterContainer extends AbstractFilterContainer {
boolean respectNBT; boolean respectNBT;
boolean blacklist; boolean blacklist;
public FilterContainer(int id, PlayerInventory inv, PacketBuffer extraData) { public FilterContainer(ContainerType<?> type, int id, PlayerInventory inv, PacketBuffer extraData) {
super(AllContainerTypes.FILTER.type, id, inv, extraData); super(type, id, inv, extraData);
} }
public FilterContainer(int id, PlayerInventory inv, ItemStack stack) { public FilterContainer(ContainerType<?> type, int id, PlayerInventory inv, ItemStack stack) {
super(AllContainerTypes.FILTER.type, id, inv, 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 @Override

View file

@ -157,9 +157,9 @@ public class FilterItem extends Item implements INamedContainerProvider {
public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) { public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) {
ItemStack heldItem = player.getHeldItemMainhand(); ItemStack heldItem = player.getHeldItemMainhand();
if (type == FilterType.REGULAR) if (type == FilterType.REGULAR)
return new FilterContainer(id, inv, heldItem); return FilterContainer.create(id, inv, heldItem);
if (type == FilterType.ATTRIBUTE) if (type == FilterType.ATTRIBUTE)
return new AttributeFilterContainer(id, inv, heldItem); return AttributeFilterContainer.create(id, inv, heldItem);
return null; return null;
} }

View file

@ -36,7 +36,7 @@ import net.minecraftforge.common.Tags;
public class AllPaletteBlocks { public class AllPaletteBlocks {
private static final CreateRegistrate REGISTRATE = Create.registrate() private static final CreateRegistrate REGISTRATE = Create.registrate()
.itemGroup(() -> Create.palettesCreativeTab) .itemGroup(() -> Create.PALETTES_CREATIVE_TAB)
.startSection(AllSections.PALETTES); .startSection(AllSections.PALETTES);
// Windows and Glass // Windows and Glass

View file

@ -59,7 +59,7 @@ public class ClientSchematicLoader {
Path path = Paths.get("schematics", schematic); Path path = Paths.get("schematics", schematic);
if (!Files.exists(path)) { if (!Files.exists(path)) {
Create.logger.fatal("Missing Schematic file: " + path.toString()); Create.LOGGER.fatal("Missing Schematic file: " + path.toString());
return; return;
} }

View file

@ -104,7 +104,7 @@ public class SchematicWorld extends WrappedWorld implements IServerWorld {
} }
return tileEntity; return tileEntity;
} catch (Exception e) { } 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; return null;

View file

@ -72,7 +72,7 @@ public class ServerSchematicLoader {
SchematicUploadEntry entry = activeUploads.get(upload); SchematicUploadEntry entry = activeUploads.get(upload);
if (entry.idleTime++ > getConfig().schematicIdleTimeout.get()) { 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); deadEntries.add(upload);
} }
@ -94,7 +94,7 @@ public class ServerSchematicLoader {
// Unsupported Format // Unsupported Format
if (!schematic.endsWith(".nbt")) { 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; return;
} }
@ -102,7 +102,7 @@ public class ServerSchematicLoader {
Path uploadPath = playerSchematicsPath.resolve(schematic).normalize(); Path uploadPath = playerSchematicsPath.resolve(schematic).normalize();
if (!uploadPath.startsWith(playerSchematicsPath)) { 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; return;
} }
@ -148,7 +148,7 @@ public class ServerSchematicLoader {
table.startUpload(schematic); table.startUpload(schematic);
} catch (IOException e) { } catch (IOException e) {
Create.logger.error("Exception Thrown when starting Upload: " + playerSchematicId); Create.LOGGER.error("Exception Thrown when starting Upload: " + playerSchematicId);
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -178,13 +178,13 @@ public class ServerSchematicLoader {
// Size Validations // Size Validations
if (data.length > getConfig().maxSchematicPacketSize.get()) { if (data.length > getConfig().maxSchematicPacketSize.get()) {
Create.logger.warn("Oversized Upload Packet received: " + playerSchematicId); Create.LOGGER.warn("Oversized Upload Packet received: " + playerSchematicId);
cancelUpload(playerSchematicId); cancelUpload(playerSchematicId);
return; return;
} }
if (entry.bytesUploaded > entry.totalBytes) { 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); cancelUpload(playerSchematicId);
return; return;
} }
@ -200,7 +200,7 @@ public class ServerSchematicLoader {
table.sendUpdate = true; table.sendUpdate = true;
} catch (IOException e) { } catch (IOException e) {
Create.logger.error("Exception Thrown when uploading Schematic: " + playerSchematicId); Create.LOGGER.error("Exception Thrown when uploading Schematic: " + playerSchematicId);
e.printStackTrace(); e.printStackTrace();
cancelUpload(playerSchematicId); cancelUpload(playerSchematicId);
} }
@ -215,10 +215,10 @@ public class ServerSchematicLoader {
try { try {
entry.stream.close(); entry.stream.close();
Files.deleteIfExists(Paths.get(getSchematicPath(), playerSchematicId)); Files.deleteIfExists(Paths.get(getSchematicPath(), playerSchematicId));
Create.logger.warn("Cancelled Schematic Upload: " + playerSchematicId); Create.LOGGER.warn("Cancelled Schematic Upload: " + playerSchematicId);
} catch (IOException e) { } catch (IOException e) {
Create.logger.error("Exception Thrown when cancelling Upload: " + playerSchematicId); Create.LOGGER.error("Exception Thrown when cancelling Upload: " + playerSchematicId);
e.printStackTrace(); e.printStackTrace();
} }
@ -249,7 +249,7 @@ public class ServerSchematicLoader {
World world = removed.world; World world = removed.world;
BlockPos pos = removed.tablePos; BlockPos pos = removed.tablePos;
Create.logger.info("New Schematic Uploaded: " + playerSchematicId); Create.LOGGER.info("New Schematic Uploaded: " + playerSchematicId);
if (pos == null) if (pos == null)
return; return;
@ -264,7 +264,7 @@ public class ServerSchematicLoader {
table.inventory.setStackInSlot(1, SchematicItem.create(schematic, player.getGameProfile().getName())); table.inventory.setStackInSlot(1, SchematicItem.create(schematic, player.getGameProfile().getName()));
} catch (IOException e) { } catch (IOException e) {
Create.logger.error("Exception Thrown when finishing Upload: " + playerSchematicId); Create.LOGGER.error("Exception Thrown when finishing Upload: " + playerSchematicId);
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -278,7 +278,7 @@ public class ServerSchematicLoader {
// Unsupported Format // Unsupported Format
if (!schematic.endsWith(".nbt")) { 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; return;
} }
@ -286,7 +286,7 @@ public class ServerSchematicLoader {
Path path = schematicPath.resolve(playerSchematicId).normalize(); Path path = schematicPath.resolve(playerSchematicId).normalize();
if (!path.startsWith(schematicPath)) { 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; return;
} }
@ -326,7 +326,7 @@ public class ServerSchematicLoader {
e.printStackTrace(); e.printStackTrace();
} }
} catch (IOException e) { } 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(); e.printStackTrace();
} }
} }

View file

@ -8,6 +8,7 @@ import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.inventory.container.Slot; import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
@ -21,8 +22,8 @@ public class SchematicTableContainer extends Container {
private Slot outputSlot; private Slot outputSlot;
private PlayerEntity player; private PlayerEntity player;
public SchematicTableContainer(int id, PlayerInventory inv, PacketBuffer extraData) { public SchematicTableContainer(ContainerType<?> type, int id, PlayerInventory inv, PacketBuffer extraData) {
super(AllContainerTypes.SCHEMATIC_TABLE.type, id); super(type, id);
player = inv.player; player = inv.player;
ClientWorld world = Minecraft.getInstance().world; ClientWorld world = Minecraft.getInstance().world;
TileEntity tileEntity = world.getTileEntity(extraData.readBlockPos()); TileEntity tileEntity = world.getTileEntity(extraData.readBlockPos());
@ -33,13 +34,17 @@ public class SchematicTableContainer extends Container {
} }
} }
public SchematicTableContainer(int id, PlayerInventory inv, SchematicTableTileEntity te) { public SchematicTableContainer(ContainerType<?> type, int id, PlayerInventory inv, SchematicTableTileEntity te) {
super(AllContainerTypes.SCHEMATIC_TABLE.type, id); super(type, id);
this.player = inv.player; this.player = inv.player;
this.te = te; this.te = te;
init(); init();
} }
public static SchematicTableContainer create(int id, PlayerInventory inv, SchematicTableTileEntity te) {
return new SchematicTableContainer(AllContainerTypes.SCHEMATIC_TABLE.get(), id, inv, te);
}
protected void init() { protected void init() {
inputSlot = new SlotItemHandler(te.inventory, 0, -35, 41) { inputSlot = new SlotItemHandler(te.inventory, 0, -35, 41) {
@Override @Override

View file

@ -68,8 +68,8 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen<SchematicT
int mainLeft = guiLeft - 56; int mainLeft = guiLeft - 56;
int mainTop = guiTop - 16; int mainTop = guiTop - 16;
CreateClient.schematicSender.refresh(); CreateClient.SCHEMATIC_SENDER.refresh();
List<ITextComponent> availableSchematics = CreateClient.schematicSender.getAvailableSchematics(); List<ITextComponent> availableSchematics = CreateClient.SCHEMATIC_SENDER.getAvailableSchematics();
schematicsLabel = new Label(mainLeft + 49, mainTop + 26, StringTextComponent.EMPTY).withShadow(); schematicsLabel = new Label(mainLeft + 49, mainTop + 26, StringTextComponent.EMPTY).withShadow();
schematicsLabel.text = StringTextComponent.EMPTY; schematicsLabel.text = StringTextComponent.EMPTY;
@ -176,7 +176,7 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen<SchematicT
@Override @Override
public boolean mouseClicked(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_) { public boolean mouseClicked(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_) {
ClientSchematicLoader schematicSender = CreateClient.schematicSender; ClientSchematicLoader schematicSender = CreateClient.SCHEMATIC_SENDER;
if (confirmButton.active && confirmButton.isHovered() && ((SchematicTableContainer) container).canWrite() if (confirmButton.active && confirmButton.isHovered() && ((SchematicTableContainer) container).canWrite()
&& schematicsArea != null) { && schematicsArea != null) {

View file

@ -110,8 +110,8 @@ public class SchematicTableTileEntity extends SyncedTileEntity implements ITicka
} }
@Override @Override
public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity p_createMenu_3_) { public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) {
return new SchematicTableContainer(p_createMenu_1_, p_createMenu_2_, this); return SchematicTableContainer.create(id, inv, this);
} }
@Override @Override

View file

@ -7,6 +7,7 @@ import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.inventory.container.Slot; import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
@ -18,8 +19,8 @@ public class SchematicannonContainer extends Container {
private SchematicannonTileEntity te; private SchematicannonTileEntity te;
private PlayerEntity player; private PlayerEntity player;
public SchematicannonContainer(int id, PlayerInventory inv, PacketBuffer buffer) { public SchematicannonContainer(ContainerType<?> type, int id, PlayerInventory inv, PacketBuffer buffer) {
super(AllContainerTypes.SCHEMATICANNON.type, id); super(type, id);
player = inv.player; player = inv.player;
ClientWorld world = Minecraft.getInstance().world; ClientWorld world = Minecraft.getInstance().world;
TileEntity tileEntity = world.getTileEntity(buffer.readBlockPos()); TileEntity tileEntity = world.getTileEntity(buffer.readBlockPos());
@ -30,13 +31,17 @@ public class SchematicannonContainer extends Container {
} }
} }
public SchematicannonContainer(int id, PlayerInventory inv, SchematicannonTileEntity te) { public SchematicannonContainer(ContainerType<?> type, int id, PlayerInventory inv, SchematicannonTileEntity te) {
super(AllContainerTypes.SCHEMATICANNON.type, id); super(type, id);
player = inv.player; player = inv.player;
this.te = te; this.te = te;
init(); init();
} }
public static SchematicannonContainer create(int id, PlayerInventory inv, SchematicannonTileEntity te) {
return new SchematicannonContainer(AllContainerTypes.SCHEMATICANNON.get(), id, inv, te);
}
protected void init() { protected void init() {
int x = 20; int x = 20;
int y = 0; int y = 0;

View file

@ -29,8 +29,6 @@ import com.simibubi.create.foundation.item.ItemHelper.ExtractionCountMode;
import com.simibubi.create.foundation.render.backend.instancing.IInstanceRendered; import com.simibubi.create.foundation.render.backend.instancing.IInstanceRendered;
import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; 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.BlockHelper;
import com.simibubi.create.foundation.utility.IPartialSafeNBT; import com.simibubi.create.foundation.utility.IPartialSafeNBT;
import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Iterate;
@ -936,7 +934,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC
@Override @Override
public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) { public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) {
return new SchematicannonContainer(id, inv, this); return SchematicannonContainer.create(id, inv, this);
} }
@Override @Override

View file

@ -239,7 +239,7 @@ public class SchematicAndQuillHandler {
if (!convertImmediately) if (!convertImmediately)
return; return;
if (!Files.exists(path)) { if (!Files.exists(path)) {
Create.logger.fatal("Missing Schematic file: " + path.toString()); Create.LOGGER.fatal("Missing Schematic file: " + path.toString());
return; return;
} }
try { try {
@ -248,14 +248,14 @@ public class SchematicAndQuillHandler {
AllPackets.channel.sendToServer(new InstantSchematicPacket(filename, origin, bounds)); AllPackets.channel.sendToServer(new InstantSchematicPacket(filename, origin, bounds));
} catch (IOException e) { } catch (IOException e) {
Create.logger.fatal("Error finding Schematic file: " + path.toString()); Create.LOGGER.fatal("Error finding Schematic file: " + path.toString());
e.printStackTrace(); e.printStackTrace();
return; return;
} }
} }
private Outliner outliner() { private Outliner outliner() {
return CreateClient.outliner; return CreateClient.OUTLINER;
} }
} }

View file

@ -50,7 +50,7 @@ public class SchematicEditScreen extends AbstractSimiScreen {
setWindowSize(background.width + 50, background.height); setWindowSize(background.width + 50, background.height);
int x = guiLeft; int x = guiLeft;
int y = guiTop; int y = guiTop;
handler = CreateClient.schematicHandler; handler = CreateClient.SCHEMATIC_HANDLER;
xInput = new TextFieldWidget(textRenderer, x + 50, y + 26, 34, 10, StringTextComponent.EMPTY); xInput = new TextFieldWidget(textRenderer, x + 50, y + 26, 34, 10, StringTextComponent.EMPTY);
yInput = new TextFieldWidget(textRenderer, x + 90, y + 26, 34, 10, StringTextComponent.EMPTY); yInput = new TextFieldWidget(textRenderer, x + 90, y + 26, 34, 10, StringTextComponent.EMPTY);

View file

@ -90,7 +90,7 @@ public class SchematicPromptScreen extends AbstractSimiScreen {
return true; return true;
} }
if (abort.isHovered()) { if (abort.isHovered()) {
CreateClient.schematicAndQuillHandler.discard(); CreateClient.SCHEMATIC_AND_QUILL_HANDLER.discard();
Minecraft.getInstance().player.closeScreen(); Minecraft.getInstance().player.closeScreen();
return true; return true;
} }
@ -102,7 +102,7 @@ public class SchematicPromptScreen extends AbstractSimiScreen {
} }
private void confirm(boolean convertImmediately) { private void confirm(boolean convertImmediately) {
CreateClient.schematicAndQuillHandler.saveSchematic(nameField.getText(), convertImmediately); CreateClient.SCHEMATIC_AND_QUILL_HANDLER.saveSchematic(nameField.getText(), convertImmediately);
Minecraft.getInstance().player.closeScreen(); Minecraft.getInstance().player.closeScreen();
} }

View file

@ -45,7 +45,7 @@ public abstract class SchematicToolBase implements ISchematicTool {
@Override @Override
public void init() { public void init() {
schematicHandler = CreateClient.schematicHandler; schematicHandler = CreateClient.SCHEMATIC_HANDLER;
selectedPos = null; selectedPos = null;
selectedFace = null; selectedFace = null;
schematicSelected = false; schematicSelected = false;

View file

@ -43,7 +43,7 @@ public class InstantSchematicPacket extends SimplePacketBase {
.getSender(); .getSender();
if (player == null) if (player == null)
return; return;
Create.schematicReceiver.handleInstantSchematic(player, name, player.world, origin, bounds); Create.SCHEMATIC_RECEIVER.handleInstantSchematic(player, name, player.world, origin, bounds);
}); });
context.get() context.get()
.setPacketHandled(true); .setPacketHandled(true);

View file

@ -73,12 +73,12 @@ public class SchematicUploadPacket extends SimplePacketBase {
if (code == BEGIN) { if (code == BEGIN) {
BlockPos pos = ((SchematicTableContainer) player.openContainer).getTileEntity() BlockPos pos = ((SchematicTableContainer) player.openContainer).getTileEntity()
.getPos(); .getPos();
Create.schematicReceiver.handleNewUpload(player, schematic, size, pos); Create.SCHEMATIC_RECEIVER.handleNewUpload(player, schematic, size, pos);
} }
if (code == WRITE) if (code == WRITE)
Create.schematicReceiver.handleWriteRequest(player, schematic, data); Create.SCHEMATIC_RECEIVER.handleWriteRequest(player, schematic, data);
if (code == FINISH) if (code == FINISH)
Create.schematicReceiver.handleFinishedUpload(player, schematic); Create.SCHEMATIC_RECEIVER.handleFinishedUpload(player, schematic);
}); });
context.get() context.get()
.setPacketHandled(true); .setPacketHandled(true);

View file

@ -110,9 +110,9 @@ public class ClientEvents {
FastRenderDispatcher.tick(); FastRenderDispatcher.tick();
ScrollValueHandler.tick(); ScrollValueHandler.tick();
CreateClient.schematicSender.tick(); CreateClient.SCHEMATIC_SENDER.tick();
CreateClient.schematicAndQuillHandler.tick(); CreateClient.SCHEMATIC_AND_QUILL_HANDLER.tick();
CreateClient.schematicHandler.tick(); CreateClient.SCHEMATIC_HANDLER.tick();
ContraptionHandler.tick(world); ContraptionHandler.tick(world);
CapabilityMinecartController.tick(world); CapabilityMinecartController.tick(world);
@ -137,8 +137,8 @@ public class ClientEvents {
ArmInteractionPointHandler.tick(); ArmInteractionPointHandler.tick();
EjectorTargetHandler.tick(); EjectorTargetHandler.tick();
PlacementHelpers.tick(); PlacementHelpers.tick();
CreateClient.outliner.tickOutlines(); CreateClient.OUTLINER.tickOutlines();
CreateClient.ghostBlocks.tickGhosts(); CreateClient.GHOST_BLOCKS.tickGhosts();
ContraptionRenderDispatcher.tick(); ContraptionRenderDispatcher.tick();
} }
@ -153,7 +153,7 @@ public class ClientEvents {
if (world.isRemote() && world instanceof ClientWorld && !(world instanceof WrappedClientWorld)) { if (world.isRemote() && world instanceof ClientWorld && !(world instanceof WrappedClientWorld)) {
CreateClient.invalidateRenderers(world); CreateClient.invalidateRenderers(world);
AnimationTickHolder.reset(); AnimationTickHolder.reset();
KineticRenderer renderer = CreateClient.kineticRenderer.get(world); KineticRenderer renderer = CreateClient.KINETIC_RENDERER.get(world);
renderer.invalidate(); renderer.invalidate();
((ClientWorld) world).loadedTileEntityList.forEach(renderer::add); ((ClientWorld) world).loadedTileEntityList.forEach(renderer::add);
} }
@ -187,10 +187,10 @@ public class ClientEvents {
SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance(); SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance();
CouplingRenderer.renderAll(ms, buffer); CouplingRenderer.renderAll(ms, buffer);
CreateClient.schematicHandler.render(ms, buffer); CreateClient.SCHEMATIC_HANDLER.render(ms, buffer);
CreateClient.ghostBlocks.renderAll(ms, buffer); CreateClient.GHOST_BLOCKS.renderAll(ms, buffer);
CreateClient.outliner.renderOutlines(ms, buffer, pt); CreateClient.OUTLINER.renderOutlines(ms, buffer, pt);
// LightVolumeDebugger.render(ms, buffer); // LightVolumeDebugger.render(ms, buffer);
buffer.draw(); buffer.draw();
RenderSystem.enableCull(); RenderSystem.enableCull();
@ -220,7 +220,7 @@ public class ClientEvents {
public static void onRenderHotbar(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay, public static void onRenderHotbar(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay,
float partialTicks) { float partialTicks) {
CreateClient.schematicHandler.renderOverlay(ms, buffer, light, overlay, partialTicks); CreateClient.SCHEMATIC_HANDLER.renderOverlay(ms, buffer, light, overlay, partialTicks);
} }
@SubscribeEvent @SubscribeEvent

View file

@ -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.contraptions.wrench.WrenchItem;
import com.simibubi.create.content.curiosities.zapper.ZapperInteractionHandler; import com.simibubi.create.content.curiosities.zapper.ZapperInteractionHandler;
import com.simibubi.create.content.curiosities.zapper.ZapperItem; 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.command.AllCommands;
import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.fluid.FluidHelper;
import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Iterate;
@ -54,10 +53,8 @@ public class CommonEvents {
public static void onServerTick(ServerTickEvent event) { public static void onServerTick(ServerTickEvent event) {
if (event.phase == Phase.START) if (event.phase == Phase.START)
return; return;
if (Create.schematicReceiver == null) Create.SCHEMATIC_RECEIVER.tick();
Create.schematicReceiver = new ServerSchematicLoader(); Create.LAGGER.tick();
Create.schematicReceiver.tick();
Create.lagger.tick();
ServerSpeedProvider.serverTick(); ServerSpeedProvider.serverTick();
} }
@ -133,21 +130,21 @@ public class CommonEvents {
@SubscribeEvent @SubscribeEvent
public static void serverStopped(FMLServerStoppingEvent event) { public static void serverStopped(FMLServerStoppingEvent event) {
Create.schematicReceiver.shutdown(); Create.SCHEMATIC_RECEIVER.shutdown();
} }
@SubscribeEvent @SubscribeEvent
public static void onLoadWorld(WorldEvent.Load event) { public static void onLoadWorld(WorldEvent.Load event) {
IWorld world = event.getWorld(); IWorld world = event.getWorld();
Create.redstoneLinkNetworkHandler.onLoadWorld(world); Create.REDSTONE_LINK_NETWORK_HANDLER.onLoadWorld(world);
Create.torquePropagator.onLoadWorld(world); Create.TORQUE_PROPAGATOR.onLoadWorld(world);
} }
@SubscribeEvent @SubscribeEvent
public static void onUnloadWorld(WorldEvent.Unload event) { public static void onUnloadWorld(WorldEvent.Unload event) {
IWorld world = event.getWorld(); IWorld world = event.getWorld();
Create.redstoneLinkNetworkHandler.onUnloadWorld(world); Create.REDSTONE_LINK_NETWORK_HANDLER.onUnloadWorld(world);
Create.torquePropagator.onUnloadWorld(world); Create.TORQUE_PROPAGATOR.onUnloadWorld(world);
WorldAttached.invalidateWorld(world); WorldAttached.invalidateWorld(world);
} }

View file

@ -23,7 +23,7 @@ public class InputEvents {
if (Minecraft.getInstance().currentScreen != null) if (Minecraft.getInstance().currentScreen != null)
return; return;
CreateClient.schematicHandler.onKeyInput(key, pressed); CreateClient.SCHEMATIC_HANDLER.onKeyInput(key, pressed);
} }
@SubscribeEvent @SubscribeEvent
@ -33,8 +33,8 @@ public class InputEvents {
double delta = event.getScrollDelta(); double delta = event.getScrollDelta();
// CollisionDebugger.onScroll(delta); // CollisionDebugger.onScroll(delta);
boolean cancelled = CreateClient.schematicHandler.mouseScrolled(delta) boolean cancelled = CreateClient.SCHEMATIC_HANDLER.mouseScrolled(delta)
|| CreateClient.schematicAndQuillHandler.mouseScrolled(delta) || FilteringHandler.onScroll(delta) || CreateClient.SCHEMATIC_AND_QUILL_HANDLER.mouseScrolled(delta) || FilteringHandler.onScroll(delta)
|| ScrollValueHandler.onScroll(delta); || ScrollValueHandler.onScroll(delta);
event.setCanceled(cancelled); event.setCanceled(cancelled);
} }
@ -47,8 +47,8 @@ public class InputEvents {
int button = event.getButton(); int button = event.getButton();
boolean pressed = !(event.getAction() == 0); boolean pressed = !(event.getAction() == 0);
CreateClient.schematicHandler.onMouseInput(button, pressed); CreateClient.SCHEMATIC_HANDLER.onMouseInput(button, pressed);
CreateClient.schematicAndQuillHandler.onMouseInput(button, pressed); CreateClient.SCHEMATIC_AND_QUILL_HANDLER.onMouseInput(button, pressed);
} }
} }

View file

@ -97,7 +97,7 @@ public interface ITE<T extends TileEntity> {
static void report(TileEntityException e) { static void report(TileEntityException e) {
if (AllConfigs.COMMON.logTeErrors.get()) if (AllConfigs.COMMON.logTeErrors.get())
Create.logger.debug("TileEntityException thrown!", e); Create.LOGGER.debug("TileEntityException thrown!", e);
} }
} }

View file

@ -26,7 +26,7 @@ public class ChunkUtilCommand {
.getWorld() .getWorld()
.getChunkProvider(); .getChunkProvider();
boolean success = Create.chunkUtil.reloadChunk(chunkProvider, chunkPos); boolean success = Create.CHUNK_UTIL.reloadChunk(chunkProvider, chunkPos);
if (success) { if (success) {
ctx.getSource() ctx.getSource()
@ -52,7 +52,7 @@ public class ChunkUtilCommand {
.getWorld() .getWorld()
.getChunkProvider(); .getChunkProvider();
boolean success = Create.chunkUtil.unloadChunk(chunkProvider, chunkPos); boolean success = Create.CHUNK_UTIL.unloadChunk(chunkProvider, chunkPos);
ctx.getSource() ctx.getSource()
.sendFeedback( .sendFeedback(
new StringTextComponent("added chunk " + chunkPos.toString() + " to unload list"), new StringTextComponent("added chunk " + chunkPos.toString() + " to unload list"),
@ -75,7 +75,7 @@ public class ChunkUtilCommand {
.then(Commands.literal("clear") .then(Commands.literal("clear")
.executes(ctx -> { .executes(ctx -> {
// chunk clear // chunk clear
int count = Create.chunkUtil.clear(ctx.getSource() int count = Create.CHUNK_UTIL.clear(ctx.getSource()
.getWorld() .getWorld()
.getChunkProvider()); .getChunkProvider());
ctx.getSource() ctx.getSource()

View file

@ -48,7 +48,7 @@ public class HighlightPacket extends SimplePacketBase {
if (Minecraft.getInstance().world == null || !Minecraft.getInstance().world.isBlockPresent(pos)) if (Minecraft.getInstance().world == null || !Minecraft.getInstance().world.isBlockPresent(pos))
return; return;
CreateClient.outliner.showAABB("highlightCommand", VoxelShapes.fullCube() CreateClient.OUTLINER.showAABB("highlightCommand", VoxelShapes.fullCube()
.getBoundingBox() .getBoundingBox()
.offset(pos), 200) .offset(pos), 200)
.lineWidth(1 / 32f) .lineWidth(1 / 32f)

View file

@ -17,8 +17,8 @@ public class KillTPSCommand {
// killtps no arguments // killtps no arguments
ctx.getSource() ctx.getSource()
.sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.0", .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.0",
Create.lagger.isLagging() ? Create.lagger.getTickTime() : 0), true); Create.LAGGER.isLagging() ? Create.LAGGER.getTickTime() : 0), true);
if (Create.lagger.isLagging()) if (Create.LAGGER.isLagging())
ctx.getSource() ctx.getSource()
.sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"),
true); true);
@ -32,9 +32,9 @@ public class KillTPSCommand {
.then(Commands.literal("start") .then(Commands.literal("start")
.executes(ctx -> { .executes(ctx -> {
// killtps start no time // killtps start no time
int tickTime = Create.lagger.getTickTime(); int tickTime = Create.LAGGER.getTickTime();
if (tickTime > 0) { if (tickTime > 0) {
Create.lagger.setLagging(true); Create.LAGGER.setLagging(true);
ctx.getSource() ctx.getSource()
.sendFeedback((Lang .sendFeedback((Lang
.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.1", tickTime)), .createTranslationTextComponent("command.killTPSCommand.status.slowed_by.1", tickTime)),
@ -57,8 +57,8 @@ public class KillTPSCommand {
int tickTime = IntegerArgumentType.getInteger(ctx, int tickTime = IntegerArgumentType.getInteger(ctx,
Lang.translate("command.killTPSCommand.argument.tickTime") Lang.translate("command.killTPSCommand.argument.tickTime")
.getUnformattedComponentText()); .getUnformattedComponentText());
Create.lagger.setTickTime(tickTime); Create.LAGGER.setTickTime(tickTime);
Create.lagger.setLagging(true); Create.LAGGER.setLagging(true);
ctx.getSource() ctx.getSource()
.sendFeedback((Lang .sendFeedback((Lang
.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.1", tickTime)), .createTranslationTextComponent("command.killTPSCommand.status.slowed_by.1", tickTime)),
@ -72,7 +72,7 @@ public class KillTPSCommand {
.then(Commands.literal("stop") .then(Commands.literal("stop")
.executes(ctx -> { .executes(ctx -> {
// killtps stop // killtps stop
Create.lagger.setLagging(false); Create.LAGGER.setLagging(false);
ctx.getSource() ctx.getSource()
.sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.2"), .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.2"),
false); false);

View file

@ -170,7 +170,7 @@ public class SConfigureConfigPacket extends SimplePacketBase {
ResourceLocation id = new ResourceLocation(value); ResourceLocation id = new ResourceLocation(value);
if (!PonderRegistry.all.containsKey(id)) { 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; return;
} }

View file

@ -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.IBlockVertexColor;
import com.simibubi.create.foundation.block.connected.CTModel; import com.simibubi.create.foundation.block.connected.CTModel;
import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour; 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.simibubi.create.foundation.block.render.CustomRenderedItemModel;
import com.tterrag.registrate.AbstractRegistrate; import com.tterrag.registrate.AbstractRegistrate;
import com.tterrag.registrate.builders.BlockBuilder; import com.tterrag.registrate.builders.BlockBuilder;
@ -222,6 +223,12 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
consumer.accept(entry, CreateClient.getCasingConnectivity()); consumer.accept(entry, CreateClient.getCasingConnectivity());
} }
@OnlyIn(Dist.CLIENT)
private static void registerBlockVertexColor(Block entry, IBlockVertexColor colorFunc) {
CreateClient.getCustomBlockModels()
.register(entry.delegate, model -> new ColoredVertexModel(model, colorFunc));
}
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
private static void registerBlockModel(Block entry, private static void registerBlockModel(Block entry,
Supplier<NonNullFunction<IBakedModel, ? extends IBakedModel>> func) { Supplier<NonNullFunction<IBakedModel, ? extends IBakedModel>> func) {
@ -250,12 +257,6 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
.get()); .get());
} }
@OnlyIn(Dist.CLIENT)
private static void registerBlockVertexColor(Block entry, IBlockVertexColor colorFunc) {
CreateClient.getColorHandler()
.register(entry, colorFunc);
}
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
private static void registerItemColor(IItemProvider entry, Supplier<Supplier<IItemColor>> colorFunc) { private static void registerItemColor(IItemProvider entry, Supplier<Supplier<IItemColor>> colorFunc) {
CreateClient.getColorHandler() CreateClient.getColorHandler()

View file

@ -119,7 +119,7 @@ public class LangMerger implements IDataProvider {
private void collectExistingEntries(Path path) throws IOException { private void collectExistingEntries(Path path) throws IOException {
if (!Files.exists(path)) { 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; return;
} }
@ -237,7 +237,7 @@ public class LangMerger implements IDataProvider {
Files.createDirectories(target.getParent()); Files.createDirectories(target.getParent());
try (BufferedWriter bufferedwriter = Files.newBufferedWriter(target)) { try (BufferedWriter bufferedwriter = Files.newBufferedWriter(target)) {
Create.logger.info(message); Create.LOGGER.info(message);
bufferedwriter.write(data); bufferedwriter.write(data);
bufferedwriter.close(); bufferedwriter.close();
} }

View file

@ -29,7 +29,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider {
@Override @Override
protected void registerRecipes(Consumer<IFinishedRecipe> p_200404_1_) { protected void registerRecipes(Consumer<IFinishedRecipe> p_200404_1_) {
all.forEach(c -> c.register(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 @FunctionalInterface

View file

@ -46,7 +46,7 @@ public abstract class LightUpdateMixin extends AbstractChunkProvider {
.getY()) == sectionY) .getY()) == sectionY)
.map(Map.Entry::getValue) .map(Map.Entry::getValue)
.forEach(tile -> { .forEach(tile -> {
CreateClient.kineticRenderer.get(world) CreateClient.KINETIC_RENDERER.get(world)
.onLightUpdate(tile); .onLightUpdate(tile);
}); });
} }

View file

@ -36,7 +36,7 @@ public class NetworkLightUpdateMixin {
chunk.getTileEntityMap() chunk.getTileEntityMap()
.values() .values()
.forEach(tile -> { .forEach(tile -> {
CreateClient.kineticRenderer.get(world) CreateClient.KINETIC_RENDERER.get(world)
.onLightUpdate(tile); .onLightUpdate(tile);
}); });
} }

View file

@ -67,14 +67,14 @@ public class RenderHooksMixin {
double camY = cameraPos.getY(); double camY = cameraPos.getY();
double camZ = cameraPos.getZ(); double camZ = cameraPos.getZ();
CreateClient.kineticRenderer.get(world) CreateClient.KINETIC_RENDERER.get(world)
.beginFrame(info, camX, camY, camZ); .beginFrame(info, camX, camY, camZ);
ContraptionRenderDispatcher.beginFrame(info, camX, camY, camZ); ContraptionRenderDispatcher.beginFrame(info, camX, camY, camZ);
} }
@Inject(at = @At("TAIL"), method = "scheduleBlockRerenderIfNeeded") @Inject(at = @At("TAIL"), method = "scheduleBlockRerenderIfNeeded")
private void checkUpdate(BlockPos pos, BlockState lastState, BlockState newState, CallbackInfo ci) { private void checkUpdate(BlockPos pos, BlockState lastState, BlockState newState, CallbackInfo ci) {
CreateClient.kineticRenderer.get(world) CreateClient.KINETIC_RENDERER.get(world)
.update(world.getTileEntity(pos)); .update(world.getTileEntity(pos));
} }
@ -85,7 +85,7 @@ public class RenderHooksMixin {
Backend.refresh(); Backend.refresh();
if (Backend.canUseInstancing() && world != null) { if (Backend.canUseInstancing() && world != null) {
KineticRenderer kineticRenderer = CreateClient.kineticRenderer.get(world); KineticRenderer kineticRenderer = CreateClient.KINETIC_RENDERER.get(world);
kineticRenderer.invalidate(); kineticRenderer.invalidate();
world.loadedTileEntityList.forEach(kineticRenderer::add); world.loadedTileEntityList.forEach(kineticRenderer::add);
} }

View file

@ -24,7 +24,7 @@ public class TileRemoveMixin {
@Inject(at = @At("TAIL"), method = "remove") @Inject(at = @At("TAIL"), method = "remove")
private void onRemove(CallbackInfo ci) { private void onRemove(CallbackInfo ci) {
if (world instanceof ClientWorld) if (world instanceof ClientWorld)
CreateClient.kineticRenderer.get(this.world) CreateClient.KINETIC_RENDERER.get(this.world)
.remove((TileEntity) (Object) this); .remove((TileEntity) (Object) this);
} }
} }

View file

@ -35,7 +35,7 @@ public class TileWorldHookMixin {
@Inject(at = @At("TAIL"), method = "addTileEntity") @Inject(at = @At("TAIL"), method = "addTileEntity")
private void onAddTile(TileEntity te, CallbackInfoReturnable<Boolean> cir) { private void onAddTile(TileEntity te, CallbackInfoReturnable<Boolean> cir) {
if (isRemote) { if (isRemote) {
CreateClient.kineticRenderer.get(self) CreateClient.KINETIC_RENDERER.get(self)
.queueAdd(te); .queueAdd(te);
} }
} }
@ -46,7 +46,7 @@ public class TileWorldHookMixin {
@Inject(at = @At(value = "INVOKE", target = "Ljava/util/Set;clear()V", ordinal = 0), method = "tickBlockEntities") @Inject(at = @At(value = "INVOKE", target = "Ljava/util/Set;clear()V", ordinal = 0), method = "tickBlockEntities")
private void onChunkUnload(CallbackInfo ci) { private void onChunkUnload(CallbackInfo ci) {
if (isRemote) { if (isRemote) {
KineticRenderer kineticRenderer = CreateClient.kineticRenderer.get(self); KineticRenderer kineticRenderer = CreateClient.KINETIC_RENDERER.get(self);
for (TileEntity tile : tileEntitiesToBeRemoved) { for (TileEntity tile : tileEntitiesToBeRemoved) {
kineticRenderer.remove(tile); kineticRenderer.remove(tile);
} }

View file

@ -113,7 +113,7 @@ public class PonderRegistry {
InputStream resourceAsStream = Create.class.getClassLoader() InputStream resourceAsStream = Create.class.getClassLoader()
.getResourceAsStream(filepath); .getResourceAsStream(filepath);
if (resourceAsStream == null) { if (resourceAsStream == null) {
Create.logger.error("Ponder schematic missing: " + path); Create.LOGGER.error("Ponder schematic missing: " + path);
return t; return t;
} }
try (DataInputStream stream = try (DataInputStream stream =
@ -121,7 +121,7 @@ public class PonderRegistry {
CompoundNBT nbt = CompressedStreamTools.read(stream, new NBTSizeTracker(0x20000000L)); CompoundNBT nbt = CompressedStreamTools.read(stream, new NBTSizeTracker(0x20000000L));
t.read(nbt); t.read(nbt);
} catch (IOException e) { } catch (IOException e) {
Create.logger.warn("Failed to read ponder schematic", e); Create.LOGGER.warn("Failed to read ponder schematic", e);
} }
return t; return t;
} }

View file

@ -631,7 +631,7 @@ public class KineticsScenes {
scene.overlay.showControls(new InputWindowElement(centerOf, Pointing.DOWN).rightClick() 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.idle(7);
scene.world.modifyBlock(util.grid.at(2, 2, 2), s -> AllBlocks.DYED_VALVE_HANDLES.get(11).getDefaultState() scene.world.modifyBlock(util.grid.at(2, 2, 2), s -> AllBlocks.DYED_VALVE_HANDLES[11].getDefaultState()
.with(ValveHandleBlock.FACING, Direction.UP), true); .with(ValveHandleBlock.FACING, Direction.UP), true);
scene.idle(10); scene.idle(10);
scene.overlay.showText(70) scene.overlay.showText(70)

View file

@ -143,7 +143,7 @@ public class ParrotElement extends AnimatedSceneElement {
ParrotEntity create(PonderWorld world) { ParrotEntity create(PonderWorld world) {
ParrotEntity entity = new ParrotEntity(EntityType.PARROT, 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 entity.setVariant(nextInt == 1 ? 0 : nextInt); // blue parrots are kinda hard to see
return entity; return entity;
} }

Some files were not shown because too many files have changed in this diff Show more