From 65853c9da090c32a887833dd4e016bcf3feaaf0d Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 7 May 2020 19:52:36 +0200 Subject: [PATCH] Creative Crate Revival - The creative crate is back on the menu - Schematicannons with creative crates no longer require gunpowder to operate - Creative crates can now be used for infinite item supply and voiding - Added a few more advancements --- .../java/com/simibubi/create/AllBlocks.java | 6 +- .../com/simibubi/create/AllTileEntities.java | 3 + .../com/simibubi/create/ScreenResources.java | 1 + .../create/data/CreateAdvancements.java | 80 ++++++++++--- .../foundation/advancement/AllTriggers.java | 1 + .../filtering/FilteringBehaviour.java | 12 ++ .../behaviour/filtering/FilteringHandler.java | 2 + .../filtering/FilteringRenderer.java | 4 + .../zapper/blockzapper/BlockzapperItem.java | 39 +++++-- .../logistics/block/diodes/LatchBlock.java | 2 +- .../block/inventories/CrateTileEntity.java | 37 ++++++ .../block/inventories/CreativeCrateBlock.java | 36 ++++++ .../inventories/CreativeCrateInventory.java | 52 +++++++++ .../inventories/CreativeCrateTileEntity.java | 106 ++++++++++++++++++ .../inventories/FlexcrateTileEntity.java | 26 +---- .../block/SchematicannonScreen.java | 44 +++++--- .../block/SchematicannonTileEntity.java | 38 ++++--- .../resources/assets/create/lang/en_us.json | 25 ++++- .../create/textures/block/crate_andesite.png | Bin 1324 -> 1320 bytes .../textures/block/crate_andesite_side.png | Bin 1298 -> 1321 bytes .../create/textures/block/crate_brass.png | Bin 1253 -> 1243 bytes .../textures/block/crate_brass_side.png | Bin 1531 -> 1538 bytes .../create/textures/block/crate_copper.png | Bin 1325 -> 1343 bytes .../textures/block/crate_copper_side.png | Bin 1387 -> 1401 bytes .../create/textures/gui/schematicannon.png | Bin 12936 -> 13735 bytes .../assets/create/textures/item/belt.png | Bin 384 -> 419 bytes .../create/advancements/copper_casing.json | 35 ++++++ .../data/create/advancements/copper_end.json | 35 ++++++ .../data/create/advancements/deforester.json | 35 ++++++ .../data/create/advancements/fist_bump.json | 2 +- .../data/create/advancements/shadow_end.json | 35 ++++++ .../create/advancements/symmetry_wand.json | 35 ++++++ .../create/advancements/upgraded_zapper.json | 29 +++++ .../data/create/advancements/water_wheel.json | 9 ++ .../data/create/advancements/zapper.json | 35 ++++++ 35 files changed, 674 insertions(+), 90 deletions(-) create mode 100644 src/main/java/com/simibubi/create/modules/logistics/block/inventories/CrateTileEntity.java create mode 100644 src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateBlock.java create mode 100644 src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateInventory.java create mode 100644 src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateTileEntity.java create mode 100644 src/main/resources/data/create/advancements/copper_casing.json create mode 100644 src/main/resources/data/create/advancements/copper_end.json create mode 100644 src/main/resources/data/create/advancements/deforester.json create mode 100644 src/main/resources/data/create/advancements/shadow_end.json create mode 100644 src/main/resources/data/create/advancements/symmetry_wand.json create mode 100644 src/main/resources/data/create/advancements/upgraded_zapper.json create mode 100644 src/main/resources/data/create/advancements/zapper.json diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 84d8351a0..d5edf2bb4 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -74,7 +74,7 @@ import com.simibubi.create.modules.logistics.block.diodes.ToggleLatchBlock; import com.simibubi.create.modules.logistics.block.extractor.ExtractorBlock; import com.simibubi.create.modules.logistics.block.extractor.LinkedExtractorBlock; import com.simibubi.create.modules.logistics.block.funnel.FunnelBlock; -import com.simibubi.create.modules.logistics.block.inventories.CrateBlock; +import com.simibubi.create.modules.logistics.block.inventories.CreativeCrateBlock; import com.simibubi.create.modules.logistics.block.inventories.FlexcrateBlock; import com.simibubi.create.modules.logistics.block.transposer.LinkedTransposerBlock; import com.simibubi.create.modules.logistics.block.transposer.TransposerBlock; @@ -182,10 +182,8 @@ public enum AllBlocks { CONTACT(new ContactBlock()), REDSTONE_BRIDGE(new RedstoneLinkBlock()), STOCKSWITCH(new StockswitchBlock()), - WAREHOUSE_CRATE(new CrateBlock(Properties.from(Blocks.ANDESITE))), FLEXCRATE(new FlexcrateBlock()), - FILTERED_CRATE(new CrateBlock(Properties.from(Blocks.ANDESITE))), - CREATIVE_CRATE(new CrateBlock(Properties.from(Blocks.ANDESITE))), + CREATIVE_CRATE(new CreativeCrateBlock(Properties.from(Blocks.ANDESITE))), EXTRACTOR(new ExtractorBlock()), VERTICAL_EXTRACTOR(new ExtractorBlock.Vertical()), LINKED_EXTRACTOR(new LinkedExtractorBlock()), diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 53519a6c0..803716846 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -82,6 +82,7 @@ import com.simibubi.create.modules.logistics.block.diodes.FlexpeaterTileEntityRe import com.simibubi.create.modules.logistics.block.extractor.ExtractorTileEntity; import com.simibubi.create.modules.logistics.block.extractor.LinkedExtractorTileEntity; import com.simibubi.create.modules.logistics.block.funnel.FunnelTileEntity; +import com.simibubi.create.modules.logistics.block.inventories.CreativeCrateTileEntity; import com.simibubi.create.modules.logistics.block.inventories.FlexcrateTileEntity; import com.simibubi.create.modules.logistics.block.transposer.LinkedTransposerTileEntity; import com.simibubi.create.modules.logistics.block.transposer.TransposerTileEntity; @@ -153,6 +154,7 @@ public enum AllTileEntities { REDSTONE_BRIDGE(RedstoneLinkTileEntity::new, AllBlocks.REDSTONE_BRIDGE), STOCKSWITCH(StockswitchTileEntity::new, AllBlocks.STOCKSWITCH), FLEXCRATE(FlexcrateTileEntity::new, AllBlocks.FLEXCRATE), + CREATIVE_CRATE(CreativeCrateTileEntity::new, AllBlocks.CREATIVE_CRATE), EXTRACTOR(ExtractorTileEntity::new, AllBlocks.EXTRACTOR, AllBlocks.VERTICAL_EXTRACTOR), LINKED_EXTRACTOR(LinkedExtractorTileEntity::new, AllBlocks.LINKED_EXTRACTOR, AllBlocks.VERTICAL_LINKED_EXTRACTOR), TRANSPOSER(TransposerTileEntity::new, AllBlocks.TRANSPOSER, AllBlocks.VERTICAL_TRANSPOSER), @@ -235,6 +237,7 @@ public enum AllTileEntities { bind(FurnaceEngineTileEntity.class, new EngineRenderer<>()); bind(SpeedControllerTileEntity.class, new SpeedControllerRenderer()); + bind(CreativeCrateTileEntity.class, new SmartTileEntityRenderer<>()); bind(RedstoneLinkTileEntity.class, new SmartTileEntityRenderer<>()); bind(ExtractorTileEntity.class, new SmartTileEntityRenderer<>()); bind(LinkedExtractorTileEntity.class, new SmartTileEntityRenderer<>()); diff --git a/src/main/java/com/simibubi/create/ScreenResources.java b/src/main/java/com/simibubi/create/ScreenResources.java index 19f7f780a..98a4e1a6f 100644 --- a/src/main/java/com/simibubi/create/ScreenResources.java +++ b/src/main/java/com/simibubi/create/ScreenResources.java @@ -26,6 +26,7 @@ public enum ScreenResources { SCHEMATICANNON_PROGRESS_2("schematicannon.png", 122, 161, 16, 15), SCHEMATICANNON_HIGHLIGHT("schematicannon.png", 0, 182, 28, 28), SCHEMATICANNON_FUEL("schematicannon.png", 0, 215, 82, 4), + SCHEMATICANNON_FUEL_CREATIVE("schematicannon.png", 0, 219, 82, 4), FLEXCRATE("flex_crate_and_stockpile_switch.png", 125, 129), FLEXCRATE_DOUBLE("double_flexcrate.png", 197, 129), diff --git a/src/main/java/com/simibubi/create/data/CreateAdvancements.java b/src/main/java/com/simibubi/create/data/CreateAdvancements.java index 6c8dd3608..4c1599ffd 100644 --- a/src/main/java/com/simibubi/create/data/CreateAdvancements.java +++ b/src/main/java/com/simibubi/create/data/CreateAdvancements.java @@ -16,11 +16,13 @@ import com.simibubi.create.AllItems; import com.simibubi.create.Create; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.advancement.KineticBlockTrigger; +import com.simibubi.create.modules.curiosities.zapper.blockzapper.BlockzapperItem; +import com.simibubi.create.modules.curiosities.zapper.blockzapper.BlockzapperItem.ComponentTier; +import com.simibubi.create.modules.curiosities.zapper.blockzapper.BlockzapperItem.Components; import net.minecraft.advancements.Advancement; import net.minecraft.advancements.Advancement.Builder; import net.minecraft.advancements.FrameType; -import net.minecraft.advancements.IRequirementsStrategy; import net.minecraft.advancements.criterion.InventoryChangeTrigger; import net.minecraft.advancements.criterion.PlacedBlockTrigger; import net.minecraft.block.Block; @@ -28,6 +30,7 @@ import net.minecraft.block.Blocks; import net.minecraft.data.DataGenerator; import net.minecraft.data.DirectoryCache; import net.minecraft.data.IDataProvider; +import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; @@ -55,7 +58,6 @@ public class CreateAdvancements implements IDataProvider { .withCriterion("0", itemGathered(AllItems.ANDESITE_ALLOY.get())) .register(t, id + ":andesite_alloy"); - kineticsBranch(t, andesite_alloy); Advancement water_wheel = advancement("water_wheel", AllBlocks.WATER_WHEEL.get(), TaskType.NORMAL) @@ -77,7 +79,7 @@ public class CreateAdvancements implements IDataProvider { .withParent(andesite_alloy) .withCriterion("0", itemGathered(AllBlocks.ANDESITE_CASING.get())) .register(t, id + ":andesite_casing"); - + andesiteExpertLane(t, andesite_casing); Advancement drill = kinecticAdvancement("drill", AllBlocks.DRILL, TaskType.NORMAL) @@ -89,9 +91,10 @@ public class CreateAdvancements implements IDataProvider { .withCriterion("0", AllTriggers.BONK.instance()) .register(t, id + ":press"); - Advancement rose_quartz = itemAdvancement("polished_rose_quartz", AllItems.POLISHED_ROSE_QUARTZ, TaskType.NORMAL) - .withParent(andesite_casing) - .register(t, id + ":polished_rose_quartz"); + Advancement rose_quartz = + itemAdvancement("polished_rose_quartz", AllItems.POLISHED_ROSE_QUARTZ, TaskType.NORMAL) + .withParent(andesite_casing) + .register(t, id + ":polished_rose_quartz"); Advancement electron_tube = itemAdvancement("electron_tube", AllItems.ELECTRON_TUBE, TaskType.NORMAL) .withParent(rose_quartz) @@ -123,6 +126,7 @@ public class CreateAdvancements implements IDataProvider { .register(t, id + ":brass"); brassAge(t, brass); + copperAge(t, press); } void kineticsBranch(Consumer t, Advancement root) { @@ -166,6 +170,20 @@ public class CreateAdvancements implements IDataProvider { } + void copperAge(Consumer t, Advancement root) { + String id = Create.ID; + + Advancement copper_casing = advancement("copper_casing", AllBlocks.COPPER_CASING.get(), TaskType.GOAL) + .withParent(root) + .withCriterion("0", itemGathered(AllBlocks.COPPER_CASING.get())) + .register(t, id + ":copper_casing"); + + Advancement copper_end = deadEnd() + .withParent(copper_casing) + .withCriterion("0", itemGathered(AllBlocks.COPPER_CASING.get())) + .register(t, id + ":copper_end"); + } + void brassAge(Consumer t, Advancement root) { String id = Create.ID; @@ -182,7 +200,7 @@ public class CreateAdvancements implements IDataProvider { .withParent(brass_casing) .register(t, id + ":deployer"); - Advancement fist_bump = advancement("fist_bump", AllBlocks.LARGE_COGWHEEL.get(), TaskType.SECRET) + Advancement fist_bump = advancement("fist_bump", AllBlocks.DEPLOYER.get(), TaskType.SECRET) .withParent(deployer) .withCriterion("0", AllTriggers.DEPLOYER_BOOP.instance()) .register(t, id + ":fist_bump"); @@ -196,21 +214,44 @@ public class CreateAdvancements implements IDataProvider { itemAdvancement("chromatic_compound", AllItems.CHROMATIC_COMPOUND, TaskType.NORMAL) .withParent(crushing_wheel) .register(t, id + ":chromatic_compound"); - - Advancement shadow_steel = - itemAdvancement("shadow_steel", AllItems.SHADOW_STEEL, TaskType.GOAL) + + Advancement shadow_steel = itemAdvancement("shadow_steel", AllItems.SHADOW_STEEL, TaskType.GOAL) .withParent(chromatic_compound) .register(t, id + ":shadow_steel"); - - Advancement refined_radiance = - itemAdvancement("refined_radiance", AllItems.REFINED_RADIANCE, TaskType.GOAL) + + Advancement refined_radiance = itemAdvancement("refined_radiance", AllItems.REFINED_RADIANCE, TaskType.GOAL) .withParent(chromatic_compound) .register(t, id + ":refined_radiance"); + + Advancement deforester = itemAdvancement("deforester", AllItems.DEFORESTER, TaskType.NORMAL) + .withParent(refined_radiance) + .register(t, id + ":deforester"); + + Advancement zapper = itemAdvancement("zapper", AllItems.PLACEMENT_HANDGUN, TaskType.NORMAL) + .withParent(refined_radiance) + .register(t, id + ":zapper"); + + ItemStack gunWithPurpurStuff = AllItems.PLACEMENT_HANDGUN.asStack(); + for (Components c : Components.values()) + BlockzapperItem.setTier(c, ComponentTier.Chromatic, gunWithPurpurStuff); + Advancement upgraded_zapper = advancement("upgraded_zapper", gunWithPurpurStuff, TaskType.CHALLENGE) + .withCriterion("0", AllTriggers.UPGRADED_ZAPPER.instance()) + .withParent(zapper) + .register(t, id + ":upgraded_zapper"); + + Advancement symmetry_wand = itemAdvancement("symmetry_wand", AllItems.SYMMETRY_WAND, TaskType.NORMAL) + .withParent(refined_radiance) + .register(t, id + ":symmetry_wand"); + + Advancement shadow_end = deadEnd() + .withParent(shadow_steel) + .withCriterion("0", itemGathered(AllItems.SHADOW_STEEL.get())) + .register(t, id + ":shadow_end"); } - + private void andesiteExpertLane(Consumer t, Advancement root) { String id = Create.ID; - + Advancement expert_lane_1 = advancement("expert_lane_1", Blocks.ANDESITE, TaskType.SILENT_GATE) .withParent(root) .withCriterion("0", itemGathered(AllBlocks.ANDESITE_CASING.get())) @@ -277,6 +318,7 @@ public class CreateAdvancements implements IDataProvider { GOAL(FrameType.GOAL, true, true, false), SECRET(FrameType.GOAL, true, true, true), SILENT_GATE(FrameType.CHALLENGE, false, false, false), + CHALLENGE(FrameType.CHALLENGE, true, true, false), ; @@ -300,6 +342,14 @@ public class CreateAdvancements implements IDataProvider { } public Builder advancement(String name, IItemProvider icon, TaskType type) { + return advancement(name, new ItemStack(icon), type); + } + + public Builder deadEnd() { + return advancement("eob", Items.OAK_SAPLING, TaskType.SILENT_GATE); + } + + public Builder advancement(String name, ItemStack icon, TaskType type) { return Advancement.Builder .builder() .withDisplay(icon, new TranslationTextComponent(LANG + name), diff --git a/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java b/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java index 99adb7a55..e264f7509 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java @@ -30,6 +30,7 @@ public class AllTriggers { SPEED_READ = simple("speed_read"), BASIN_THROW = simple("basin"), PRESS_COMPACT = simple("compact"), + UPGRADED_ZAPPER = simple("upgraded_zapper"), MIXER_MIX = simple("mixer"); private static SimpleTrigger simple(String id) { diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringBehaviour.java b/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringBehaviour.java index 901ff7c8e..7c8b02381 100644 --- a/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringBehaviour.java @@ -1,6 +1,7 @@ package com.simibubi.create.foundation.behaviour.filtering; import java.util.function.Consumer; +import java.util.function.Supplier; import com.simibubi.create.AllPackets; import com.simibubi.create.foundation.behaviour.ValueBoxTransform; @@ -29,6 +30,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { private ItemStack filter; public int count; private Consumer callback; + private Supplier isActive; int scrollableValue; int ticksUntilScrollPacket; @@ -40,6 +42,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { slotPositioning = slot; showCount = false; callback = stack -> {}; + isActive = () -> true; textShift = Vec3d.ZERO; count = 0; ticksUntilScrollPacket = -1; @@ -93,6 +96,11 @@ public class FilteringBehaviour extends TileEntityBehaviour { callback = filterCallback; return this; } + + public FilteringBehaviour onlyActiveWhen(Supplier condition) { + isActive = condition; + return this; + } public FilteringBehaviour showCount() { showCount = true; @@ -161,5 +169,9 @@ public class FilteringBehaviour extends TileEntityBehaviour { public boolean anyAmount() { return count == 0; } + + public boolean isActive() { + return isActive.get(); + } } diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringHandler.java b/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringHandler.java index 215f5355e..7e30aab98 100644 --- a/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringHandler.java +++ b/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringHandler.java @@ -41,6 +41,8 @@ public class FilteringHandler { FilteringBehaviour behaviour = TileEntityBehaviour.get(world, pos, FilteringBehaviour.TYPE); if (behaviour == null) return; + if (!behaviour.isActive()) + return; BlockRayTraceResult ray = RaycastHelper.rayTraceRange(world, player, 10); if (ray == null) diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringRenderer.java b/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringRenderer.java index bf5f1cfe9..87d00bf23 100644 --- a/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringRenderer.java @@ -41,6 +41,8 @@ public class FilteringRenderer { FilteringBehaviour behaviour = TileEntityBehaviour.get(world, pos, FilteringBehaviour.TYPE); if (behaviour == null) return; + if (!behaviour.isActive()) + return; if (Minecraft.getInstance().player.isSneaking()) return; @@ -75,6 +77,8 @@ public class FilteringRenderer { FilteringBehaviour behaviour = TileEntityBehaviour.get(tileEntityIn, FilteringBehaviour.TYPE); if (behaviour == null) return; + if (!behaviour.isActive()) + return; if (behaviour.getFilter().isEmpty()) return; diff --git a/src/main/java/com/simibubi/create/modules/curiosities/zapper/blockzapper/BlockzapperItem.java b/src/main/java/com/simibubi/create/modules/curiosities/zapper/blockzapper/BlockzapperItem.java index 20c0480b6..5cc8cd05a 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/zapper/blockzapper/BlockzapperItem.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/zapper/blockzapper/BlockzapperItem.java @@ -7,6 +7,7 @@ import java.util.Set; import com.simibubi.create.AllItems; import com.simibubi.create.Create; +import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.block.render.CustomRenderedItemModel; import com.simibubi.create.foundation.gui.ScreenOpener; import com.simibubi.create.foundation.item.IHaveCustomItemModel; @@ -110,8 +111,10 @@ public class BlockzapperItem extends ZapperItem implements IHaveCustomItemModel continue; if (!player.isCreative() && BlockHelper.findAndRemoveInInventory(selectedState, player, 1) == 0) { player.getCooldownTracker().setCooldown(stack.getItem(), 20); - player.sendStatusMessage( - new StringTextComponent(TextFormatting.RED + Lang.translate("blockzapper.empty")), true); + player + .sendStatusMessage( + new StringTextComponent(TextFormatting.RED + Lang.translate("blockzapper.empty")), + true); return false; } @@ -119,9 +122,9 @@ public class BlockzapperItem extends ZapperItem implements IHaveCustomItemModel dropBlocks(world, player, stack, face, placed); for (Direction updateDirection : Direction.values()) - selectedState = selectedState.updatePostPlacement(updateDirection, - world.getBlockState(placed.offset(updateDirection)), world, placed, - placed.offset(updateDirection)); + selectedState = selectedState + .updatePostPlacement(updateDirection, world.getBlockState(placed.offset(updateDirection)), + world, placed, placed.offset(updateDirection)); BlockSnapshot blocksnapshot = BlockSnapshot.getBlockSnapshot(world, placed); IFluidState ifluidstate = world.getFluidState(placed); @@ -132,9 +135,20 @@ public class BlockzapperItem extends ZapperItem implements IHaveCustomItemModel return false; } - if (player instanceof ServerPlayerEntity) - CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayerEntity) player, placed, - new ItemStack(selectedState.getBlock())); + if (player instanceof ServerPlayerEntity && world instanceof ServerWorld) { + ServerPlayerEntity serverPlayer = (ServerPlayerEntity) player; + CriteriaTriggers.PLACED_BLOCK.trigger(serverPlayer, placed, new ItemStack(selectedState.getBlock())); + + boolean fullyUpgraded = true; + for (Components c : Components.values()) { + if (getTier(c, stack) != ComponentTier.Chromatic) { + fullyUpgraded = false; + break; + } + } + if (fullyUpgraded) + AllTriggers.UPGRADED_ZAPPER.trigger(serverPlayer); + } } return true; @@ -179,8 +193,9 @@ public class BlockzapperItem extends ZapperItem implements IHaveCustomItemModel Vec3d start = player.getPositionVec().add(0, player.getEyeHeight(), 0); Vec3d range = player.getLookVec().scale(getRange(stack)); - BlockRayTraceResult raytrace = player.world.rayTraceBlocks( - new RayTraceContext(start, start.add(range), BlockMode.COLLIDER, FluidMode.NONE, player)); + BlockRayTraceResult raytrace = player.world + .rayTraceBlocks( + new RayTraceContext(start, start.add(range), BlockMode.COLLIDER, FluidMode.NONE, player)); BlockPos pos = raytrace.getPos().toImmutable(); if (pos == null) @@ -318,8 +333,8 @@ public class BlockzapperItem extends ZapperItem implements IHaveCustomItemModel Block.spawnDrops(worldIn.getBlockState(placed), worldIn, playerIn.getPosition(), tileentity); if (getTier(Components.Retriever, item) == ComponentTier.Chromatic) - for (ItemStack stack : Block.getDrops(worldIn.getBlockState(placed), (ServerWorld) worldIn, placed, - tileentity)) + for (ItemStack stack : Block + .getDrops(worldIn.getBlockState(placed), (ServerWorld) worldIn, placed, tileentity)) if (!playerIn.inventory.addItemStackToInventory(stack)) Block.spawnAsEntity(worldIn, placed, stack); } diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/diodes/LatchBlock.java b/src/main/java/com/simibubi/create/modules/logistics/block/diodes/LatchBlock.java index a1dbe7134..241e68a62 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/block/diodes/LatchBlock.java +++ b/src/main/java/com/simibubi/create/modules/logistics/block/diodes/LatchBlock.java @@ -34,7 +34,7 @@ public class LatchBlock extends ToggleLatchBlock { Direction direction = state.get(HORIZONTAL_FACING); Direction left = direction.rotateY(); Direction right = direction.rotateYCCW(); - boolean shouldSide = worldIn.isBlockPowered(pos.offset(left)) || worldIn.isBlockPowered(pos.offset(right)); + boolean shouldSide = worldIn.isSidePowered(pos, left) || worldIn.isSidePowered(pos, right); TickPriority tickpriority = TickPriority.HIGH; if (this.isFacingTowardsRepeater(worldIn, pos, state)) diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CrateTileEntity.java b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CrateTileEntity.java new file mode 100644 index 000000000..a30a76486 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CrateTileEntity.java @@ -0,0 +1,37 @@ +package com.simibubi.create.modules.logistics.block.inventories; + +import java.util.List; + +import com.simibubi.create.foundation.behaviour.base.SmartTileEntity; +import com.simibubi.create.foundation.behaviour.base.TileEntityBehaviour; + +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.AxisDirection; + +public abstract class CrateTileEntity extends SmartTileEntity { + + public CrateTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + } + + @Override + public void addBehaviours(List behaviours) {} + + public boolean isDoubleCrate() { + return getBlockState().get(FlexcrateBlock.DOUBLE); + } + + public boolean isSecondaryCrate() { + if (!hasWorld()) + return false; + if (!(getBlockState().getBlock() instanceof CrateBlock)) + return false; + return isDoubleCrate() && getFacing().getAxisDirection() == AxisDirection.NEGATIVE; + } + + public Direction getFacing() { + return getBlockState().get(FlexcrateBlock.FACING); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateBlock.java b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateBlock.java new file mode 100644 index 000000000..cd63d9a89 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateBlock.java @@ -0,0 +1,36 @@ +package com.simibubi.create.modules.logistics.block.inventories; + +import com.simibubi.create.foundation.block.ITE; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; + +public class CreativeCrateBlock extends CrateBlock implements ITE { + + public CreativeCrateBlock(Properties p_i48415_1_) { + super(p_i48415_1_); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CreativeCrateTileEntity(); + } + + @Override + public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { + withTileEntityDo(worldIn, pos, CreativeCrateTileEntity::onPlaced); + } + + @Override + public Class getTileEntityClass() { + return CreativeCrateTileEntity.class; + } +} diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateInventory.java b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateInventory.java new file mode 100644 index 000000000..2e0fb5f14 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateInventory.java @@ -0,0 +1,52 @@ +package com.simibubi.create.modules.logistics.block.inventories; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; + +public class CreativeCrateInventory implements IItemHandler { + + private CreativeCrateTileEntity te; + + public CreativeCrateInventory(CreativeCrateTileEntity te) { + this.te = te; + } + + @Override + public int getSlots() { + return 2; + } + + @Override + public ItemStack getStackInSlot(int slot) { + if (slot == 1) + return ItemStack.EMPTY; + ItemStack filter = te.filter.getFilter().copy(); + if (!filter.isEmpty()) + filter.setCount(filter.getMaxStackSize()); + return filter; + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + return ItemStack.EMPTY; + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + ItemStack filter = te.filter.getFilter().copy(); + if (!filter.isEmpty()) + filter.setCount(amount); + return filter; + } + + @Override + public int getSlotLimit(int slot) { + return getStackInSlot(slot).getMaxStackSize(); + } + + @Override + public boolean isItemValid(int slot, ItemStack stack) { + return true; + } + +} diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateTileEntity.java b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateTileEntity.java new file mode 100644 index 000000000..ccf5bb73b --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/CreativeCrateTileEntity.java @@ -0,0 +1,106 @@ +package com.simibubi.create.modules.logistics.block.inventories; + +import java.util.List; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.behaviour.ValueBoxTransform; +import com.simibubi.create.foundation.behaviour.base.TileEntityBehaviour; +import com.simibubi.create.foundation.behaviour.filtering.FilteringBehaviour; + +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; + +public class CreativeCrateTileEntity extends CrateTileEntity { + + public CreativeCrateTileEntity() { + super(AllTileEntities.CREATIVE_CRATE.type); + inv = new CreativeCrateInventory(this); + itemHandler = LazyOptional.of(() -> inv); + } + + FilteringBehaviour filter; + LazyOptional itemHandler; + private CreativeCrateInventory inv; + + @Override + public void addBehaviours(List behaviours) { + filter = createFilter(); + filter.onlyActiveWhen(this::filterVisible); + filter.withCallback(this::filterChanged); + behaviours.add(filter); + } + + private boolean filterVisible() { + if (!hasWorld() || isDoubleCrate() && !isSecondaryCrate()) + return false; + return true; + } + + private void filterChanged(ItemStack filter) { + if (!filterVisible()) + return; + CreativeCrateTileEntity otherCrate = getOtherCrate(); + if (otherCrate == null) + return; + if (ItemStack.areItemsEqual(filter, otherCrate.filter.getFilter())) + return; + otherCrate.filter.setFilter(filter); + } + + private CreativeCrateTileEntity getOtherCrate() { + if (!AllBlocks.CREATIVE_CRATE.typeOf(getBlockState())) + return null; + TileEntity tileEntity = world.getTileEntity(pos.offset(getFacing())); + if (tileEntity instanceof CreativeCrateTileEntity) + return (CreativeCrateTileEntity) tileEntity; + return null; + } + + public void onPlaced() { + if (!isDoubleCrate()) + return; + CreativeCrateTileEntity otherCrate = getOtherCrate(); + if (otherCrate == null) + return; + + filter.withCallback($ -> {}); + filter.setFilter(otherCrate.filter.getFilter()); + filter.withCallback(this::filterChanged); + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side) { + if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + return itemHandler.cast(); + return super.getCapability(cap, side); + } + + public FilteringBehaviour createFilter() { + return new FilteringBehaviour(this, new ValueBoxTransform() { + + @Override + protected Vec3d getOrientation(BlockState state) { + return new Vec3d(0, 0, 90); + } + + @Override + protected Vec3d getLocation(BlockState state) { + return new Vec3d(0.5, 13 / 16d, 0.5); + } + + protected float getScale() { + return super.getScale() * 1.5f; + }; + + }); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateTileEntity.java b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateTileEntity.java index 7de4030b2..234d63c48 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateTileEntity.java @@ -2,7 +2,6 @@ package com.simibubi.create.modules.logistics.block.inventories; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; -import com.simibubi.create.foundation.block.SyncedTileEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; @@ -15,7 +14,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; -import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraftforge.common.capabilities.Capability; @@ -24,7 +22,7 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; -public class FlexcrateTileEntity extends SyncedTileEntity implements INamedContainerProvider { +public class FlexcrateTileEntity extends CrateTileEntity implements INamedContainerProvider { public class Inv extends ItemStackHandler { public Inv() { @@ -81,20 +79,6 @@ public class FlexcrateTileEntity extends SyncedTileEntity implements INamedConta return new FlexcrateContainer(id, inventory, this); } - public boolean isDoubleCrate() { - return getBlockState().get(FlexcrateBlock.DOUBLE); - } - - public FlexcrateTileEntity getMainCrate() { - if (isSecondaryCrate()) - return getOtherCrate(); - return this; - } - - public boolean isSecondaryCrate() { - return isDoubleCrate() && getFacing().getAxisDirection() == AxisDirection.NEGATIVE; - } - public FlexcrateTileEntity getOtherCrate() { if (!AllBlocks.FLEXCRATE.typeOf(getBlockState())) return null; @@ -104,10 +88,12 @@ public class FlexcrateTileEntity extends SyncedTileEntity implements INamedConta return null; } - public Direction getFacing() { - return getBlockState().get(FlexcrateBlock.FACING); + public FlexcrateTileEntity getMainCrate() { + if (isSecondaryCrate()) + return getOtherCrate(); + return this; } - + public void onSplit() { FlexcrateTileEntity other = getOtherCrate(); if (other == null) diff --git a/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java b/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java index e189ea4a5..a2994b5d2 100644 --- a/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java +++ b/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java @@ -82,18 +82,20 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen(4); replaceLevelIndicators = new Vector<>(4); - List icons = ImmutableList.of(ScreenResources.I_DONT_REPLACE, ScreenResources.I_REPLACE_SOLID, - ScreenResources.I_REPLACE_ANY, ScreenResources.I_REPLACE_EMPTY); - List toolTips = ImmutableList.of(Lang.translate("gui.schematicannon.option.dontReplaceSolid"), - Lang.translate("gui.schematicannon.option.replaceWithSolid"), - Lang.translate("gui.schematicannon.option.replaceWithAny"), - Lang.translate("gui.schematicannon.option.replaceWithEmpty")); + List icons = ImmutableList + .of(ScreenResources.I_DONT_REPLACE, ScreenResources.I_REPLACE_SOLID, ScreenResources.I_REPLACE_ANY, + ScreenResources.I_REPLACE_EMPTY); + List toolTips = ImmutableList + .of(Lang.translate("gui.schematicannon.option.dontReplaceSolid"), + Lang.translate("gui.schematicannon.option.replaceWithSolid"), + Lang.translate("gui.schematicannon.option.replaceWithAny"), + Lang.translate("gui.schematicannon.option.replaceWithEmpty")); for (int i = 0; i < 4; i++) { replaceLevelIndicators.add(new Indicator(x + 16 + i * 18, y + 96, "")); @@ -189,8 +191,10 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen tip = button.getToolTip(); tip.add(TextFormatting.BLUE + (enabled ? optionEnabled : optionDisabled)); - tip.addAll(TooltipHelper.cutString(Lang.translate("gui.schematicannon.option." + tooltipKey + ".description"), - GRAY, GRAY)); + tip + .addAll(TooltipHelper + .cutString(Lang.translate("gui.schematicannon.option." + tooltipKey + ".description"), GRAY, + GRAY)); } @Override @@ -221,8 +225,9 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen tooltip = new ArrayList<>(); - tooltip.add(Lang.translate(_gunpowderLevel, "" + (int) (te.fuelLevel * 100))); - tooltip.add(GRAY + Lang.translate(_shotsRemaining, "" + TextFormatting.BLUE + shotsLeft)); + float f = te.hasCreativeCrate ? 100 : te.fuelLevel * 100; + tooltip.add(Lang.translate(_gunpowderLevel, "" + (int) f)); + if (!te.hasCreativeCrate) + tooltip.add(GRAY + Lang.translate(_shotsRemaining, "" + TextFormatting.BLUE + shotsLeft)); if (shotsLeftWithItems != shotsLeft) - tooltip.add(GRAY - + Lang.translate(_shotsRemainingWithBackup, "" + TextFormatting.BLUE + shotsLeftWithItems)); + tooltip + .add(GRAY + Lang + .translate(_shotsRemainingWithBackup, "" + TextFormatting.BLUE + shotsLeftWithItems)); renderTooltip(tooltip, mouseX, mouseY); } diff --git a/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonTileEntity.java b/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonTileEntity.java index b09beee26..3ebed6948 100644 --- a/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonTileEntity.java @@ -359,7 +359,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } // Check Fuel - if (fuelLevel <= 0) { + if (fuelLevel <= 0 && !hasCreativeCrate) { fuelLevel = 0; state = State.PAUSED; statusMsg = "noGunpowder"; @@ -466,7 +466,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } public double getFuelUsageRate() { - return config().schematicannonFuelUsage.get() / 100f; + return hasCreativeCrate ? 0 : config().schematicannonFuelUsage.get() / 100f; } protected void initializePrinter(ItemStack blueprint) { @@ -556,8 +556,10 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC int amountFound = 0; for (IItemHandler iItemHandler : attachedInventories) { - amountFound += ItemHelper.extract(iItemHandler, s -> ItemRequirement.validate(required, s), - ExtractionCountMode.UPTO, required.getCount(), true).getCount(); + amountFound += ItemHelper + .extract(iItemHandler, s -> ItemRequirement.validate(required, s), ExtractionCountMode.UPTO, + required.getCount(), true) + .getCount(); if (amountFound < required.getCount()) continue; @@ -570,14 +572,16 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC if (!simulate && success) { int amountFound = 0; for (IItemHandler iItemHandler : attachedInventories) { - amountFound += ItemHelper.extract(iItemHandler, s -> ItemRequirement.validate(required, s), - ExtractionCountMode.UPTO, required.getCount(), false).getCount(); + amountFound += ItemHelper + .extract(iItemHandler, s -> ItemRequirement.validate(required, s), ExtractionCountMode.UPTO, + required.getCount(), false) + .getCount(); if (amountFound < required.getCount()) continue; break; } } - + return success; } @@ -618,14 +622,16 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC public void finishedPrinting() { inventory.setStackInSlot(0, ItemStack.EMPTY); - inventory.setStackInSlot(1, - new ItemStack(AllItems.EMPTY_BLUEPRINT.get(), inventory.getStackInSlot(1).getCount() + 1)); + inventory + .setStackInSlot(1, + new ItemStack(AllItems.EMPTY_BLUEPRINT.get(), inventory.getStackInSlot(1).getCount() + 1)); state = State.STOPPED; statusMsg = "finished"; resetPrinter(); target = getPos().add(1, 0, 0); - world.playSound(null, pos.getX(), pos.getY(), pos.getZ(), AllSoundEvents.SCHEMATICANNON_FINISH.get(), - SoundCategory.BLOCKS, 1, .7f); + world + .playSound(null, pos.getX(), pos.getY(), pos.getZ(), AllSoundEvents.SCHEMATICANNON_FINISH.get(), + SoundCategory.BLOCKS, 1, .7f); sendUpdate = true; } @@ -703,6 +709,8 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } protected void refillFuelIfPossible() { + if (hasCreativeCrate) + return; if (1 - fuelLevel + 1 / 128f < getFuelAddedByGunPowder()) return; if (inventory.getStackInSlot(4).isEmpty()) @@ -772,8 +780,9 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } public void playFiringSound() { - world.playSound(null, pos.getX(), pos.getY(), pos.getZ(), AllSoundEvents.SCHEMATICANNON_LAUNCH_BLOCK.get(), - SoundCategory.BLOCKS, .1f, 1.1f); + world + .playSound(null, pos.getX(), pos.getY(), pos.getZ(), AllSoundEvents.SCHEMATICANNON_LAUNCH_BLOCK.get(), + SoundCategory.BLOCKS, .1f, 1.1f); } public void sendToContainer(PacketBuffer buffer) { @@ -837,8 +846,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } @Override - public void addBehaviours(List behaviours) { - } + public void addBehaviours(List behaviours) {} @Override public void lazyTick() { diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index b6bd3b61f..d9bdd07d8 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -131,9 +131,7 @@ "block.create.contact": "Redstone Contact", "block.create.redstone_bridge": "Redstone Link", "block.create.stockswitch": "Stockpile Switch", - "block.create.warehouse_crate": "Warehouse Crate", "block.create.flexcrate": "Adjustable Crate", - "block.create.filtered_crate": "Filtered Crate", "block.create.creative_crate": "The Endless Crate", "block.create.extractor": "Extractor", "block.create.belt_funnel": "Funnel", @@ -683,6 +681,8 @@ "advancement.create.brass.desc": "Use Crushed Copper and Crushed Zinc to create some Brass.", "advancement.create.brass_casing": "The Brass Age", "advancement.create.brass_casing.desc": "Use newly obtained Brass and some Wood to create a more advanced Casing.", + "advancement.create.copper_casing": "The Copper Age", + "advancement.create.copper_casing.desc": "Use some copper sheets to create Copper Casing.", "advancement.create.crafter": "Automated Assembly", "advancement.create.crafter.desc": "Place and power some Mechanical Crafters", @@ -700,6 +700,18 @@ "advancement.create.refined_radiance": "Bright and Inspiring", "advancement.create.refined_radiance.desc": "Create Refined Radiance, a powerful chromatic substance.", + "advancement.create.zapper": "Building with style", + "advancement.create.zapper.desc": "Craft a Blockzapper. A radiant laser gun that helps you build.", + "advancement.create.upgraded_zapper": "Radiant Overdrive", + "advancement.create.upgraded_zapper.desc": "Create and activate a fully upgraded Blockzapper.", + "advancement.create.symmetry_wand": "Radiant Mirrors", + "advancement.create.symmetry_wand.desc": "Craft a Staff of Symmetry.", + "advancement.create.deforester": "Radiant Chopping", + "advancement.create.deforester.desc": "Craft a Deforester, and say goodbye to the local forest.", + + "advancement.create.eob": "End of Beta", + "advancement.create.eob.desc": "Expect more content here in the future. <3", + "create.subtitle.schematicannon_launch_block": "Schematicannon shoots", "create.subtitle.schematicannon_finish": "Schematicannon finishes", "create.subtitle.slime_added": "Slime squishes", @@ -1074,6 +1086,11 @@ "block.create.flexcrate.tooltip.summary": "This _Storage_ _Container_ allows Manual control over its capacity. It can hold up to _16_ _Stacks_ of any Item. Supports _Redstone_ _Comparators_.", "block.create.flexcrate.tooltip.control1": "When R-Clicked", "block.create.flexcrate.tooltip.action1": "Opens the _Interface_.", + + "block.create.creative_crate.tooltip": "THE ENDLESS CRATE", + "block.create.creative_crate.tooltip.summary": "This _Storage_ _Container_ allows infinite replication of any item. Place next to a _Schematicannon_ to remove any material requirements.", + "block.create.creative_crate.tooltip.condition1": "When Item in Filter Slot", + "block.create.creative_crate.tooltip.behaviour1": "Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", "block.create.extractor.tooltip": "EXTRACTOR", "block.create.extractor.tooltip.summary": "_Takes_ _Items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items unless the space is clear. Can be assigned an item-stack as a _filter_.", @@ -1204,9 +1221,5 @@ "tool.create.rose_quartz.tooltip": "ROSE QUARTZ TOOLS", "tool.create.rose_quartz.tooltip.summary": "This tool grants you a _greater_ _reach_ for _breaking_ _blocks_ or _placing_ _blocks_ from the off-hand.", - "block.create.warehouse_crate.tooltip": "WIP", - "block.create.filtered_crate.tooltip": "WIP", - "block.create.creative_crate.tooltip": "WIP", - "itemGroup.create": "Create" } diff --git a/src/main/resources/assets/create/textures/block/crate_andesite.png b/src/main/resources/assets/create/textures/block/crate_andesite.png index f79955709f73f00330c03016629d1b48b113ae38..6668942774007dd4c0d1c611769be5b53827d17f 100644 GIT binary patch delta 1263 zcmVT zVSCn(89!qBU*nqX8QW3zlmkDhr@O1CyQ{mayNX^kIee~sc7J8YwG6}Ia9$#E9Ea=3 zb+Z5Htm-fM&bK?cM1k|$uhL)`QL$)phw1bw83mKf_!sJQJLHr-GICG3Z8REEwc^rb zHcS0esZ_cAtp289(49YS)79^<=Hl7rw0^xtW!t2`4?^1V9g4Com{ zg-W)e2G6tXwtteH-|}b>PAQBgWLqZPJ?hc9roXgrr278*q(>J%_;fxaQGTA2X*)c~ z#(I@Jw?uBmqOwz@hU$oNV||Ub&(tWFGZL9wwP~YX<^Nu8derchT*;R8MIA)rDU}>6 zIj%&3*4{t70uV(5vWf-r-7?n!WWV3tqi#g>aKBHFgMTrN2V-t4*+r#TPVK~qEUTo( zi6;}#7ykgOU~n!Z3e^2|-T{Dt+d-dGG#ZmzF0icPd*oR}n_iJ#+br?F025=Y0VW#^ z<8k!9_=ja`2ViS8zsB`M0Ub<)l_KqRM|5v*z;a9uWUysmvTzh~S^p1X9d%>*Fg&JC zyTj#_4Sxu|c9$pHa0|RrS#5LeWYt-QQG6VNV-+}W9i1q@=Gk1vZp#&A1+X1~(nxHe zP>MSP89=~U&Suk;T+Y`n#uH$*u#v+~pUdExHh}GbWfo17g1)*w%8&pIOFBX+Zd1ky zAYYI zJjWzFd7@dR%b#4HU3&8^Rzh&+c7dY-(uTSitUeHU-u^(IVpc$$kyxgj&-2y+WT*Kb zK!1UG@qbL}2$r#InOPWtn&A|Pyh1sFA@b#6Hn;z0Jnbp z-Yc_a-DMx%S63xe25ZO0nt-bWS6fztA|`-e|M8bcDFyD_*decMkzrVbw+GG=IV)r2 zx!zX}@60yS2mTxHtAD5L-BfD6{UNvMeqBedreAi*wexDse3Dyg zSELSb6>$WBCFALog9mx_>h*QPyMXli#Y>z+23Ec4h$rM_ga<{!ct}zQ;!y=wU^HJ1 z25(d?`s?O3`t#@S=>DxA=>GK`F7N*K6Ss+y*&Tp~6Y!M77hpUjlm$2^*h(rM2!G@F zAw|7bW^IvQ+-|U+4@O4HuV<0fWp@Hd8}fyCpk66*^dhSh#HS1Bj3jOA*%$~`iCkUN3QQI z6j_J|U{KKX!d86ltKtEab-$iPR%j_JKlf6NbBra*L&=4B0Kk{;w&s3)MLdAA?$-sJ zr?^{Lu^3=BfrWTLo?-#M9IW#9;?w0RK5aY!7UBW1N;w-KG9YqYmUTwiF;>+D>Hh*D Z`VVuaAL--8Vs`)l002ovPDHLkV1ljNT&4g3 delta 1267 zcmVPH&<%m`~JK|bnw@({y8U{W5?E&5X=5{JtZBFyoJCwIg`uiZDZO@@_JSHoXAt?FR^A6QF z3Y4=AHF=t44}X;G(sqf4!IXkSqbiPH0$Oxxi} zwl<4Ya&zPsEXq4ss;Yr#S2s6k_d=OcDI=D-MVq!NMgH&AT8XNjk}KJ&vFL+vJf)mt z#m5yZ&}{s}I{;xgBrBUC&&_imKz8p@gSsKnerrI_dVgaY56Ap1XJ?gSDP@TfSyoQX z6D=lSEdBvj#^73r6{vWdYyp6Y+r0soa5N@2pJ7?SD^bZJs+Y2Kxt`;H0Tza-0Tvtj z(LDNC{KGP30r*Bc&41s%k}|eXZat* z3V)m@E1mHF&*(Q|=y@m`PVpMUyUtiW0F2|XWR z1wMRdXI87Y9K#3dsszem?Z{bUaFq~h^J-G$1c>Y3{<6QIz{8(zQ7LbcVOWH>2f-3G zD`TX&KTrYh!doBElP8Z^0rmlC1Q5@G_ka3(Th##FTcy*^ti4gSJTToWzLy-H;>E?2KzC%h3TVBMRJd_rDEL{JpWha!C-5mjIX zM)TcZ@@mndKYzYMjl17b>;Cuj$B(z@_aFAyy!a+cCM|#nC*UbZEWmsyXbT8V@PCzs zd?1MOhXpF-JZp>k+HRHOd~akd#PuYyyQC$6d_%pI4^#?S&R%49g2Z$IgHa@|>*)E! zDkLnUUdjg~pNrbYLikLw$_FH$NCMM~`NaZBA}5?oSTiZ>@&RcBxj8`c3E3rp>GxGS zj#{@Y6j{m#;84)?%64?_>+%7#^=!DFM0P1V-+86XHRclKq2y9N01(TcHs^7DO+J9O z9@hn&r-WPCu{dC|fTesuo?-#99IT7?64T`=K5IS!mhu7dN;w-KG9YqYmJCM8Io9=s dSb_6{=syb0L&~5mb)*0Q002ovPDHLkV1iZhVc-A& diff --git a/src/main/resources/assets/create/textures/block/crate_andesite_side.png b/src/main/resources/assets/create/textures/block/crate_andesite_side.png index b291afe77952a8003e7a83240e478b0d19e1e416..b0b2a96bb6ac14c58bc1d2c784bbdf16d4f1f190 100644 GIT binary patch delta 1251 zcmV<91RVR43aJW^R)4-pL_t(oN5xmoZyQw*AJ^-TwVibw$9B>Wg|Rp} zPg=i^nKy4{-n^M-dfG_g=hnNoVjevKf*=_6EL_*+7W32k0)Na24ek2v^%N`c$!DLk z0^J~_Y}P@SF&rLq+wTW7SMs<&h+}f>GRC2Q$gNu}Q#xh&ophRx+AUtA`N1oE;Q8Ra z_buh^8!K^n&ZS(&p?lkh^h~2dVHBBhhBliAv{Ij^lwrkOCmK*MB+BPlW`fpHkG#1& z6^)ESK23u`ihpG-FO*nLY!s0(==ZnV^z~2oQs=N3+FqQ^qKQjUslmTHC><4lIx zs8%U)TY2#&(em}Nukq@eOv5^$3^`CpbnU!7cZp`<5ul&XWjP1PTH$FdSfzz7U#LW>G9@w|azGG99Du)X z?k1U1XTszN;2Q0w$GJ@0Dy_Kijn^*5H(q&E0Ra?18ZK4r9MZRMf;vgXC?wBaTceeg z%lx6Z)a!M+dga-q*hs+cWz#d>s6b20VzWI z2&51pf3TM(-vhub^ zh!yCMtbuSu>fIl{qCdX-oHl;^k~Y5og8N&)e8V&ms6Buf0Q6>njsYlz=m)S5QhzkS z3dnmvp1{xV3j}@ok?JGJZ|>dR#|%s&Je`_jsQSfDJ{BfKBk}C17pBxi+GQw^z@g2z?Y_1o*Ie*t=j3qYUppe6tS N002ovPDHLkV1fdCT7Lil delta 1228 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 A+5i9m delta 1196 zcmV;d1XKIl3FQfpNq@os01m-V}}Z%yy^?&P%op?K9*?^V6}zv@?SX*Qe5aeqP`c;kh0xfelD$$BDj zJk5HpKbcBU+nYNK=z_3SQ|ZHB^MlWRUQ!2Md+xE>Gnbyy!NDj=1~fx`hDaiPOnY9x}^GLc12xd$1r!RpzQZvUpDXlD}R678^~WwshGDQRZ8=FGIfR(w}6wt z9;j)ysXuOGJ`S_DvGF+BbKp3UU&7;pGH~Usi#ZLW@l-0ATlI{($i;W+LfmY)N6XEF z!Ehq)fBKUKxU8Ny2nW^!UtN1?w$g3N=5M|Hy^iBp<;eZF**(%1llccvhFTw7e(__S zDSxXc!mznmJ#hZv?uc3q8mP^?ZMne?MrH#Zw#^#q$^M{C!ET>6bQ_tgXDH4+ak$G~Yk&Gs2P{7$Er%m{$LZ^wORqR%Cokr7V2d-? z3LG;oz0&BHL02QjgfU?35H1?9Ig^I;I39=-A%JFJv=h&; zHBb8@Fjk7vpbqdxvoZAANxAK|Il!r3@1*a!=^h32a2)t2-&YS1Goy;w1HOql<$sp{ z_WQa%s3-i>aq0fq;K~EX|XT<1=JI^IG2ugvR$3Ki~uM1 z)dPV4AJ}a-r)Yc=8YEy5{t$y-Pv9`RWex1B2R^y_?CjK9NABL+DShjC=Xuk4&(EG& zliPQ;mYEFY14WdZc;P-%CcFBqc`FW<#WEpUh{onlfD8L5%dgFaB*&Ctx_*Wy;HA-oHh4J0GHK>%5Q)TCP7qf*WH z5Nq68gZBXXTnFSkg(@2&y6&$Q0=!Z@#S@2PF%;S5IxCf@>-ec+Do$f&hzHgJSR->h z@n2*ZxpIwyp+JW&;0ObH2!L+-`mGTE2jmd_y&f9Ob$_|YbOu^EFpxBrmo<)$PA3=v ztf;RHvVRMaF4OlTWMCDs7hTAKqrp**v5{9RRNd9B!`z3d}!3?}M(eEW=CT-@* z9h5zeVu4WI9U_6e2lO=vq3CLb06CC|1*uSSX*?5WFJQ4A3IK`JE$*45LBhW)2 z>!n)scYx?>HKLnez2gn1W8`6wP7fRh5R)$tSkj(S(`Ag?%ZDX(93E>%< zgRZ=$46<#PmF9~M&mjl&dtCsda(06}MJnbM$5q}pnD($=q1;ugu0NOkYyiALXIk6X zrNqJCy!oq~#CoCVq?1Oi-Q;(q`e01EqJQCPUmB1m#_mD9kUV$(RNg7Ndz1$#9dtD#6z8}X6n||GlmZxr zMzXhiK))~Kct6T`q(6%3i9SqPWvJ7Mc8UHCpd^#Q8qbTWshB~ZM!eUn01V+13*%`Y zCiohL@{Tf;KkyzFO1T)pFt=1>_TtJ0or#+r@fG}h^JDt<>-Tt$62(CI!k~Pq#!o3< z82i)rSLlmtZ}WOSPP{?lAw=#FLQ$#NT@T9@il~bTi3B47y%9+(|Ky`LkM%(^Gq==g l<()NmN}TqC=K8I7%Q6n=Kr>-E~Pli2xl zMcgV)D=MG@#0hajf;$(GI02$aTo4k6B5|sOxFISb1VyM4w_cGr^~R}46;Pt22}v3^ zAwNx0$Bw=J*|oRxz4f!lPD|5Lsh>2vvu|hSee?ciLcZ_Q(|-gLxbW%O4vSj7Md5JJ zHzPr(;kKyNBC?`k{tq}+kL;Mi?~x&sWx%7%|N5u-5EJ<2hxh%|phb(fcGO}C9^kqz zziW*q4TQL>`cU@&|Bt6_I;hm?&G#+^1kM~A^iNGBD8K7a-3u5-jWF5f0QViWh{y%_ z5A@3g@*luD`hObGwYXKLxqlA=0x#xLelBA(0lW<}OgqIIjixM~Ab@N*W>TZ+Q>78? z5M#VXi{}7(UkBtnr8*N4U4P_@As#6^#T$!bFcdk}CM%V<=LVr-Dx1d52sexcFh=@# z<6C5Cg=&M0NT^2_aL59>3xIy}4cig^24oTazwR3Jb$_|YbPIH1U^Hc_T{hT1x;bGH zz>WpVAp0*D=`wvjTn4Mc_o53iaM)Q2x;bHPG;zbjTqNIU`h1CTb-#-Q@*mL0z=fi#;{wD$GHy_*;?Zkcj2GY9urHNdi>jFAK2-6gtAh*SQGFW#<{}_Sp z0vRvaqW=R#SEmsD_~qOFL?%I7yCrhHCN95T0|HMI zPlNzs=;YKWUH|)*s&Y}z`)wyoGsnj{Yp&1!LrLX#WXj5>L$AGbnrfh3QEOyWNWm05XMx3VD8r zs&(Ze&!?gyD!{Jg(1JBa6)}l{;HeO|gR&`R7GR>SnEQ%CM3Dqyi6B!1AhTbt(lgmK z)s^Yzme$Eo7RFjIySPArLrgZn1b<+{p?Hi3LLnwOstF>o1f4yZ<^I**7s$4{I}lXb z^`YT;JqocNETC`fpzO4JS`0`U$y?0ks-OZ}$X&HNz;0VhfDND_vh&*|vf>GDcWMTw zsf#e;EILzu!{+9!^otb zG?Whn8~iWn5;me-QW4q9s~a?uFnjzfxN_+u`sS;5xsMb@L;8YHvC`nTq%X++{N0E2 z#rd~*JTE7^LEypf5JFLX-q$=t$9r<6aD diff --git a/src/main/resources/assets/create/textures/block/crate_copper.png b/src/main/resources/assets/create/textures/block/crate_copper.png index 993ef700750c905f62602560840c94955cef8e21..291bafc0edf9530b0e46fe86f499cafeb18a9d18 100644 GIT binary patch delta 1286 zcmV+h1^N1|3cm`FNq@os01mEhwg) zj!Y9LnNBA2n>W*r_dD;Mm-}AcOmwB-2j|`U?!D*do_p@OhkyQU`0#n-$tT+U7mX6t zYTVUPtJf(SiI_iFqr+pp8xDR87<=>UZ+x}^FTOKRrR;TTZPj^!8+TewZvDLhZUL{c zPLQ?1zJAJI{)ra8I8XEE7Ja=uSuU`0OdLP`6$Ju8YBmjS{k|Rwhl0!uG`0+@M~?AQ zxn%Xo=1;^E)_;g{TqHy*`8>UK_)#im{;)>n2%deq{mkJ9>G-KncrckvQn9qbeW1tB zc2a*l#;uM$gWF1O6}OG>;xBKS^GB!m(zjRgd<1?Tu~2KMvx@aG^I&4YCMX_FC0QA0 z-+0R6AX?7cunBxZUi|k@r`Z!a90m*z4shF0hHREA_J1zW&t!A9qVwM`(aN7I_B@nK zjNZ!xbmLzynq%RX8N8+eDw0EqAr+ZhENtYS5w;ovv13>d!oSReWQPFU5891C8g||W zhX)Wyuo@PN)gl;u5XJ#ngY_VIM7+|CUk_ryVF02QJAn0vX3|U&WEc}d3}6ns5-;dp z>BcWNr+?9F<`dh1tx|!l6YDQrzDhq{{F$wX5D|o3A_hP>Q#}@hw;R8HT>*y&_Kpnm zRS|2k8wk_gFFT#uzn|yP%2~^_mhheBps9PDHikddEbxwzkIYvLcK_ zDBzWdy!cPOev}hl_)>=d?Nt2OLut-X^+r=2g@2hgy$}vL({3c}{0BeAI>{NInPfeS z$^fKdHsIAq9yT8%3vx%jAi*PWuf;sZr0oV6V0Hh;uw#J#{=r)>?>YLO{JYc%!f!rP z3Q`XsLKCB7d@E2J;2p;s4kS`z_8PqBI)oqjM0f?d3_$1KQ4b(O=g)k{lYwZ2?>v%C zvwv2n_fEcSuhF6NzjkJc$Aap%80r?F)p6qSLp$q%*;Ic!IdOm$LJ`_`UzsDLQl{$a zO=?!l^wGsEWv^f3xs5`BHg4XaOW95H2&{Ty?(I)$XlM{a9Z{}S=-AX<&UygKQ)A4N{yj)%o@1XttT9*5`Mt=w5m8Q|+*7FDiK9!lVdqF3I0EY)UARdd^K`9;(IO>65 zFvN->R4N+$PHk; zRjmM{K;Ushgd^xc!)o_>Faqu)V1K_nb>B2SH~$hR5&(&)S~CL^RSl|KJrMy54MXLD zMea*Ifh2Qc;ld6jIzBu($1tF%`}NbR84 w3~m|h?@sl=Zg0B0=Q_W8eK#5ZfqH=GFOj(}WZ!yZtN;K207*qoM6N<$f?v^RmH+?% delta 1268 zcmVC&BuP!WXgT3oqNFjSE$g$kw>an~YJP{c0WSQk>I5G?qEQ2Yr>W2F`p z+fGKNiIYqxyFWtI4H55abf@ z>gxoVYwXxbxobbu+~-&5jjz7*1$eNO=gl#2{K91l1`TR98(jK*JroWZtPIrG8&-`R z{l!wzs*$Z9kAKCj9%Z;lh?a6WI&<_871DoMy>bQ59%&yr`Zygw_c0}tNggN^*SG|F z{LGVf#(KHbv8#V$le>it5}ow3*(@EK+)dwH&+!%bdBj4sUSmZ_f4t8YC=L%Lc{9kP zqeGSk(arRtEuz~^AC}PJATZG1$7Nj+`KMIog#gsknSZRk(Ul+OY3c7JdmNjL4ewzA zy6LYL%)W5TbY7Ey^5jrFp*(Y)7aM$JkXd6vum*bw+A*!db97Jwsx zH5dzPSr~N)`T?1P`4Ct{tkO+icVfUn0A7m|fc?R#6bnuOpicxofH9m(te{(^o4&l9 zdcce)Hh+QjVxHLv`>WS(&`%4$GJ7l{3*nUT0SN9?_XW}IrmsI&z+r*ig9FT3*y1!; zOgF!rbYkB=9!Dv6EvN3Lug31Yxen1sJP}=iz6PM{Z^{SYp|cmi<-uSy!fzhIrdh4gd#7Ku=jhP& zPk&yV=RQNdmWFx-D0Q5A`rzh#V0uryogCZG8w%b%F++`Vi7Lx?s97n|`GpJ<0oL+) zTD!AI3yVeb3aor$=IkewNc8iZPAHYj^zy_*&U^ry4~>jcYJ8k3l`4hRkM+^}pVEa7 zKBG&Q=IM*CZ>W%ZmyCeHk#B!$l6BmW(|^{~uL^11yT>AJ09Mh#1Y+?xhe-i4m>-wY zG+$b!-;Fk1_cf?&#e0NY%!Q5{vUo)~U_>Pzfu0@~)ZK9810`i@0X9b*?;CiSrVdO| ztT(1M-9-ncr>z+#9Pz`-C&U6ftk(c@Lx7-R`n%gFm_Vapng>6Z7sNU!|GbsqI)9$g zgFvj(Y_z!ayaIvG=i}20IuQaMB!b3zdu^u_3kV$ffMJAqV=O8e4cg-M0LTbAbMAev z3-JE+)4}Oh^99=(1)f)s{o^;v+`dK2xn;#T!2<$hKeDl&dO^nxSsYFW8BnL!oe^+f z0o -bs3H_7x5!00L2^YC0ye8f|2`2t?=Ke9fLSSKr9(B%eT#IW>26({IP^1!o83(^Zt#$-n>VBjt*V_`7tZCS0p5N&~pa&8eQ{&t^RcU=O}f3_xx^a e{15U0qJII_RYz0}LdYcm0000;c7G(sefV|)<93Zrm@>Zq<|JiiW?f$H)Yi<7eD)uD^UD(y4EU*}8=410 zhV}tkFKE0F+J76>3fFz%5beHuH!c6WOtn&(qVbrqvkH$#39v?AGQr;;y!C=9LtqO` zrem%C;W1ti3witj>hJI8g(09f8K?Dpkv6nV8c6rkg^L&I{nrmubyK6Qm1|Vn(&*Tk zC0-Cffu`X zD9yrEf`(N-{pbt&?BlQL`0>;9!_0y)W}W*WP=F!=){MmBv~P5j#>V%vOu!06_&BmfId|r_56rc)UwrTa-9{({ds|wu751j%JmiU8&)`R@)UOh>{=E^9i~-L z&5m($_y9H_R?Fpbw6#%WrSXGIz;WQn!G~JUWM1YV0p6XN+7WHnzf0}|>1x0~-X zz)qo*#19ExKn+5ArAnVnzhcUeNN9%Q#}1C05h`DFj`6{OuTvum1-I)$S+8+BO1;t! z-+#i;#E2!Md{ox;Je0t93!z?E0)gfll?#aa%Na{Lq7~M6!?e z-m{11=Fd?uwZe`;sL9q$3*2Kip{IqG(S z47Wq#fCMGGKx9S;^*sjH9Zi`b8alt{$J6xe zz%DvGx`&<{NOJko{li^jgxiviogOqddz55mW?laSD3?$+LNmey00000NkvXXu0mjf D*3^^8 delta 1331 zcmV-31XJ6L0*V_AA+ke;XcIjS%3A}mmX_G}P z#syWYX4ylvR-;%nYBppH;27rx+x#Bz?X9oB^;ra7d}oeI`D=9R!p}4`xwkj0k4~$} zr9T*=wqB)hB2BG&jlXLHgWQL<7cg%7)Qn~0$D;(W#&9ah?e|`P z!LlJ>56q4vy1T}wctKzw7N^1ZHeMJ8hEfUID3s`*@+M_7yXfNO%k=JRhp4exrpoFK zYF5g0Y%$Ms0gTV(uk#u*2lKHWP+VW9;*DimTrQa&fPeAK=oqDvgLH0Tk&PBgMIO9+ zEJIh8`ilb*!z&+u@R{ulZ1@_6;UP8%0su<11zJ#}J-f%4Og?I!B|rY+3Hv}Gl}NH7 zConnS57JL7IXYWjqu;eI{bm^7>=72UJ1s8Z1$ay#q+kt@1RA|VrB0L({1=G#5H64dbmQIL+}AaM-+zDOur)@7Q^=fJBBCT@P!YG`W+W%Pgk2eCfe) p+Ze%JNylCfnmav8j-EQ>`xn}rYJSE)-JSpd002ovPDHLkV1j!{d1U|q diff --git a/src/main/resources/assets/create/textures/gui/schematicannon.png b/src/main/resources/assets/create/textures/gui/schematicannon.png index 8a54fcfdf6fd2c565542be7e170e5f16d6a5913a..cb838679c815ea20f8dff3b09b71d1d340a2452f 100644 GIT binary patch literal 13735 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�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 C)vJX7 literal 12936 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 FV1i?ilso_c diff --git a/src/main/resources/data/create/advancements/copper_casing.json b/src/main/resources/data/create/advancements/copper_casing.json new file mode 100644 index 000000000..bbe9ce860 --- /dev/null +++ b/src/main/resources/data/create/advancements/copper_casing.json @@ -0,0 +1,35 @@ +{ + "parent": "create:press", + "display": { + "icon": { + "item": "create:copper_casing" + }, + "title": { + "translate": "advancement.create.copper_casing" + }, + "description": { + "translate": "advancement.create.copper_casing.desc" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "0": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:copper_casing" + } + ] + } + } + }, + "requirements": [ + [ + "0" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/advancements/copper_end.json b/src/main/resources/data/create/advancements/copper_end.json new file mode 100644 index 000000000..26aadef85 --- /dev/null +++ b/src/main/resources/data/create/advancements/copper_end.json @@ -0,0 +1,35 @@ +{ + "parent": "create:copper_casing", + "display": { + "icon": { + "item": "minecraft:oak_sapling" + }, + "title": { + "translate": "advancement.create.eob" + }, + "description": { + "translate": "advancement.create.eob.desc" + }, + "frame": "challenge", + "show_toast": false, + "announce_to_chat": false, + "hidden": false + }, + "criteria": { + "0": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:copper_casing" + } + ] + } + } + }, + "requirements": [ + [ + "0" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/advancements/deforester.json b/src/main/resources/data/create/advancements/deforester.json new file mode 100644 index 000000000..55f8d4606 --- /dev/null +++ b/src/main/resources/data/create/advancements/deforester.json @@ -0,0 +1,35 @@ +{ + "parent": "create:refined_radiance", + "display": { + "icon": { + "item": "create:deforester" + }, + "title": { + "translate": "advancement.create.deforester" + }, + "description": { + "translate": "advancement.create.deforester.desc" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": false, + "hidden": false + }, + "criteria": { + "0": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:deforester" + } + ] + } + } + }, + "requirements": [ + [ + "0" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/advancements/fist_bump.json b/src/main/resources/data/create/advancements/fist_bump.json index 8bd15daf2..0e5b04869 100644 --- a/src/main/resources/data/create/advancements/fist_bump.json +++ b/src/main/resources/data/create/advancements/fist_bump.json @@ -2,7 +2,7 @@ "parent": "create:deployer", "display": { "icon": { - "item": "create:large_cogwheel" + "item": "create:deployer" }, "title": { "translate": "advancement.create.fist_bump" diff --git a/src/main/resources/data/create/advancements/shadow_end.json b/src/main/resources/data/create/advancements/shadow_end.json new file mode 100644 index 000000000..0926bf69f --- /dev/null +++ b/src/main/resources/data/create/advancements/shadow_end.json @@ -0,0 +1,35 @@ +{ + "parent": "create:shadow_steel", + "display": { + "icon": { + "item": "minecraft:oak_sapling" + }, + "title": { + "translate": "advancement.create.eob" + }, + "description": { + "translate": "advancement.create.eob.desc" + }, + "frame": "challenge", + "show_toast": false, + "announce_to_chat": false, + "hidden": false + }, + "criteria": { + "0": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:shadow_steel" + } + ] + } + } + }, + "requirements": [ + [ + "0" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/advancements/symmetry_wand.json b/src/main/resources/data/create/advancements/symmetry_wand.json new file mode 100644 index 000000000..4a8ace7f4 --- /dev/null +++ b/src/main/resources/data/create/advancements/symmetry_wand.json @@ -0,0 +1,35 @@ +{ + "parent": "create:refined_radiance", + "display": { + "icon": { + "item": "create:symmetry_wand" + }, + "title": { + "translate": "advancement.create.symmetry_wand" + }, + "description": { + "translate": "advancement.create.symmetry_wand.desc" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": false, + "hidden": false + }, + "criteria": { + "0": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:symmetry_wand" + } + ] + } + } + }, + "requirements": [ + [ + "0" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/advancements/upgraded_zapper.json b/src/main/resources/data/create/advancements/upgraded_zapper.json new file mode 100644 index 000000000..283a70ea8 --- /dev/null +++ b/src/main/resources/data/create/advancements/upgraded_zapper.json @@ -0,0 +1,29 @@ +{ + "parent": "create:zapper", + "display": { + "icon": { + "item": "create:placement_handgun", + "nbt": "{Retriever:\"Chromatic\",Scope:\"Chromatic\",Amplifier:\"Chromatic\",Body:\"Chromatic\",Accelerator:\"Chromatic\"}" + }, + "title": { + "translate": "advancement.create.upgraded_zapper" + }, + "description": { + "translate": "advancement.create.upgraded_zapper.desc" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "0": { + "trigger": "create:upgraded_zapper" + } + }, + "requirements": [ + [ + "0" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/advancements/water_wheel.json b/src/main/resources/data/create/advancements/water_wheel.json index 677d41082..e5f32c139 100644 --- a/src/main/resources/data/create/advancements/water_wheel.json +++ b/src/main/resources/data/create/advancements/water_wheel.json @@ -17,12 +17,21 @@ }, "criteria": { "0": { + "trigger": "minecraft:placed_block", + "conditions": { + "block": "create:water_wheel" + } + }, + "1": { "trigger": "create:water_wheel" } }, "requirements": [ [ "0" + ], + [ + "1" ] ] } \ No newline at end of file diff --git a/src/main/resources/data/create/advancements/zapper.json b/src/main/resources/data/create/advancements/zapper.json new file mode 100644 index 000000000..8fd2c563c --- /dev/null +++ b/src/main/resources/data/create/advancements/zapper.json @@ -0,0 +1,35 @@ +{ + "parent": "create:refined_radiance", + "display": { + "icon": { + "item": "create:placement_handgun" + }, + "title": { + "translate": "advancement.create.zapper" + }, + "description": { + "translate": "advancement.create.zapper.desc" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": false, + "hidden": false + }, + "criteria": { + "0": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:placement_handgun" + } + ] + } + } + }, + "requirements": [ + [ + "0" + ] + ] +} \ No newline at end of file