From d52c4a6ba11f970e277c454373809981bb1759f1 Mon Sep 17 00:00:00 2001 From: PiTheGuy Date: Thu, 7 Apr 2022 20:26:59 -0500 Subject: [PATCH] Added Magic Press --- .../java/com/pitheguy/magicmod/MagicMod.java | 2 + .../pitheguy/magicmod/blocks/MagicPress.java | 80 +++++++++ .../magicmod/client/gui/MagicPressScreen.java | 42 +++++ .../container/MagicInfuserContainer.java | 2 +- .../container/MagicPressContainer.java | 115 +++++++++++++ .../MultiItemSlotItemHandler.java | 22 +++ .../SingleItemSlotItemHandler.java | 2 +- .../magicmod/init/ModContainerTypes.java | 3 + .../magicmod/init/ModTileEntityTypes.java | 2 + .../tileentity/MagicPressTileEntity.java | 158 ++++++++++++++++++ .../util/FunctionalIntReferenceHolder.java | 27 +++ .../magicmod/util/RegistryHandler.java | 6 + .../magicmod/blockstates/magic_press.json | 5 + .../resources/assets/magicmod/lang/en_us.json | 4 +- .../magicmod/models/block/magic_press.json | 8 + .../magicmod/models/item/magic_press.json | 3 + .../textures/blocks/magic_press_side.png | Bin 0 -> 1184 bytes .../textures/blocks/magic_press_top.png | Bin 0 -> 931 bytes .../magicmod/textures/gui/magic_press.png | Bin 0 -> 14463 bytes .../recipes/reinforced_magic_items.json | 3 +- .../data/magicmod/recipes/magic_press.json | 36 ++++ 21 files changed, 516 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/pitheguy/magicmod/blocks/MagicPress.java create mode 100644 src/main/java/com/pitheguy/magicmod/client/gui/MagicPressScreen.java create mode 100644 src/main/java/com/pitheguy/magicmod/container/MagicPressContainer.java create mode 100644 src/main/java/com/pitheguy/magicmod/container/itemhandlers/MultiItemSlotItemHandler.java rename src/main/java/com/pitheguy/magicmod/container/itemhandlers/{magicinfuser => }/SingleItemSlotItemHandler.java (91%) create mode 100644 src/main/java/com/pitheguy/magicmod/tileentity/MagicPressTileEntity.java create mode 100644 src/main/java/com/pitheguy/magicmod/util/FunctionalIntReferenceHolder.java create mode 100644 src/main/resources/assets/magicmod/blockstates/magic_press.json create mode 100644 src/main/resources/assets/magicmod/models/block/magic_press.json create mode 100644 src/main/resources/assets/magicmod/models/item/magic_press.json create mode 100644 src/main/resources/assets/magicmod/textures/blocks/magic_press_side.png create mode 100644 src/main/resources/assets/magicmod/textures/blocks/magic_press_top.png create mode 100644 src/main/resources/assets/magicmod/textures/gui/magic_press.png create mode 100644 src/main/resources/data/magicmod/recipes/magic_press.json diff --git a/src/main/java/com/pitheguy/magicmod/MagicMod.java b/src/main/java/com/pitheguy/magicmod/MagicMod.java index 1c4083f..9f01b09 100644 --- a/src/main/java/com/pitheguy/magicmod/MagicMod.java +++ b/src/main/java/com/pitheguy/magicmod/MagicMod.java @@ -2,6 +2,7 @@ import com.pitheguy.magicmod.client.gui.MagicCrateScreen; import com.pitheguy.magicmod.client.gui.MagicInfuserScreen; +import com.pitheguy.magicmod.client.gui.MagicPressScreen; import com.pitheguy.magicmod.init.ModContainerTypes; import com.pitheguy.magicmod.init.ModTileEntityTypes; import com.pitheguy.magicmod.util.RegistryHandler; @@ -51,6 +52,7 @@ public MagicMod() { private void doClientStuff(final FMLClientSetupEvent event) { ScreenManager.registerFactory(ModContainerTypes.MAGIC_INFUSER.get(), MagicInfuserScreen::new); ScreenManager.registerFactory(ModContainerTypes.MAGIC_CRATE.get(), MagicCrateScreen::new); + ScreenManager.registerFactory(ModContainerTypes.MAGIC_PRESS.get(), MagicPressScreen::new); } @SubscribeEvent diff --git a/src/main/java/com/pitheguy/magicmod/blocks/MagicPress.java b/src/main/java/com/pitheguy/magicmod/blocks/MagicPress.java new file mode 100644 index 0000000..654ed45 --- /dev/null +++ b/src/main/java/com/pitheguy/magicmod/blocks/MagicPress.java @@ -0,0 +1,80 @@ +package com.pitheguy.magicmod.blocks; + +import com.pitheguy.magicmod.init.ModTileEntityTypes; +import com.pitheguy.magicmod.tileentity.MagicPressTileEntity; +import com.pitheguy.magicmod.util.ModItemHandler; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import net.minecraftforge.fml.network.NetworkHooks; + +import javax.annotation.Nullable; + +public class MagicPress extends Block { + + public MagicPress() { + super(Properties.create(Material.IRON) + .hardnessAndResistance(6.5f, 8.0f) + .sound(SoundType.METAL) + .harvestLevel(4) + .harvestTool(ToolType.PICKAXE) + ); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return ModTileEntityTypes.MAGIC_PRESS.get().create(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + } + + @Override + public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { + if (worldIn != null && !worldIn.isRemote()) { + TileEntity tile = worldIn.getTileEntity(pos); + if(tile instanceof MagicPressTileEntity) { + NetworkHooks.openGui((ServerPlayerEntity) player,(INamedContainerProvider) tile,pos); + return ActionResultType.SUCCESS; + } + } + return ActionResultType.SUCCESS; + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + TileEntity tile = worldIn.getTileEntity(pos); + if(tile instanceof MagicPressTileEntity) { + MagicPressTileEntity infuser = (MagicPressTileEntity) tile; + ((ModItemHandler)infuser.getInventory()).toNonNullList().forEach(item -> { + ItemEntity itemEntity = new ItemEntity(worldIn, pos.getX(), pos.getY(), pos.getZ(), item); + worldIn.addEntity(itemEntity); + }); + } + if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) { + worldIn.removeTileEntity(pos); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/pitheguy/magicmod/client/gui/MagicPressScreen.java b/src/main/java/com/pitheguy/magicmod/client/gui/MagicPressScreen.java new file mode 100644 index 0000000..5733a83 --- /dev/null +++ b/src/main/java/com/pitheguy/magicmod/client/gui/MagicPressScreen.java @@ -0,0 +1,42 @@ +package com.pitheguy.magicmod.client.gui; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.pitheguy.magicmod.container.MagicPressContainer; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; + +public class MagicPressScreen extends ContainerScreen { + private static final ResourceLocation TEXTURE = new ResourceLocation("magicmod", "textures/gui/magic_press.png"); + public MagicPressScreen(MagicPressContainer screenContainer, PlayerInventory inv, ITextComponent titleIn) { + super(screenContainer, inv, titleIn); + + this.guiLeft = 0; + this.guiTop = 0; + this.xSize = 176; + this.ySize = 162; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { + RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); + this.minecraft.getTextureManager().bindTexture(TEXTURE); + this.blit(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); + this.blit(this.guiLeft + 49, this.guiTop + 53, 0, 165, this.container.getFuelScaled(), 16); + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { + super.drawGuiContainerForegroundLayer(mouseX, mouseY); + this.font.drawString(this.title.getFormattedText(), 8, 8, 0x404040); + this.font.drawString(this.playerInventory.getDisplayName().getFormattedText(), 8, 70, 0x404040); + } + + @Override + public void render(int mouseX, int mouseY, float partialTicks) { + this.renderBackground(); + super.render(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } +} diff --git a/src/main/java/com/pitheguy/magicmod/container/MagicInfuserContainer.java b/src/main/java/com/pitheguy/magicmod/container/MagicInfuserContainer.java index 7fe052b..4d9f754 100644 --- a/src/main/java/com/pitheguy/magicmod/container/MagicInfuserContainer.java +++ b/src/main/java/com/pitheguy/magicmod/container/MagicInfuserContainer.java @@ -1,6 +1,6 @@ package com.pitheguy.magicmod.container; -import com.pitheguy.magicmod.container.itemhandlers.magicinfuser.SingleItemSlotItemHandler; +import com.pitheguy.magicmod.container.itemhandlers.SingleItemSlotItemHandler; import com.pitheguy.magicmod.init.ModContainerTypes; import com.pitheguy.magicmod.tileentity.MagicInfuserTileEntity; import com.pitheguy.magicmod.util.RegistryHandler; diff --git a/src/main/java/com/pitheguy/magicmod/container/MagicPressContainer.java b/src/main/java/com/pitheguy/magicmod/container/MagicPressContainer.java new file mode 100644 index 0000000..c3de8c6 --- /dev/null +++ b/src/main/java/com/pitheguy/magicmod/container/MagicPressContainer.java @@ -0,0 +1,115 @@ +package com.pitheguy.magicmod.container; + +import com.pitheguy.magicmod.container.itemhandlers.MultiItemSlotItemHandler; +import com.pitheguy.magicmod.container.itemhandlers.SingleItemSlotItemHandler; +import com.pitheguy.magicmod.init.ModContainerTypes; +import com.pitheguy.magicmod.tileentity.MagicPressTileEntity; +import com.pitheguy.magicmod.util.FunctionalIntReferenceHolder; +import com.pitheguy.magicmod.util.RegistryHandler; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IWorldPosCallable; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import javax.annotation.Nonnull; +import java.util.Arrays; +import java.util.Objects; + +import static com.pitheguy.magicmod.util.RegistryHandler.*; + +public class MagicPressContainer extends Container { + + public MagicPressTileEntity tileEntity; + private final IWorldPosCallable canInteractWithCallable; + public FunctionalIntReferenceHolder fuel; + + //Server constructor + public MagicPressContainer(final int windowID, final PlayerInventory playerInv, final MagicPressTileEntity tile) { + super(ModContainerTypes.MAGIC_PRESS.get(), windowID); + this.canInteractWithCallable = IWorldPosCallable.of(tile.getWorld(), tile.getPos()); + this.tileEntity = tile; + final int slotSizePlus2 = 18; + final int startX = 8; + //Hotbar + int hotbarY = 139; + for (int col = 0; col < 9; col++) { + this.addSlot(new Slot(playerInv, col, (startX + (col * slotSizePlus2)), hotbarY)); + } + //Main Player Inventory + int startY = 81; + for (int row = 0; row < 3; row++) { + for (int col = 0; col < 9; col++) { + this.addSlot(new Slot(playerInv, 9+(row*9)+col, startX + (col * slotSizePlus2), startY + (row * slotSizePlus2))); + } + } + //Magic Press Inventory + this.addSlot(new MultiItemSlotItemHandler(tile.getInventory(), 0, 27, 19, Arrays.asList(MAGIC_HELMET.get(),MAGIC_CHESTPLATE.get(),MAGIC_LEGGINGS.get(),MAGIC_BOOTS.get(),MAGIC_PICKAXE.get(),MAGIC_AXE.get(),MAGIC_SHOVEL.get(),MAGIC_SWORD.get(),MAGIC_HOE.get()))); + this.addSlot(new SingleItemSlotItemHandler(tile.getInventory(), 1, 76, 19, MAGIC_PLATE.get())); + this.addSlot(new MultiItemSlotItemHandler(tile.getInventory(), 2, 134,19, Arrays.asList(REINFORCED_MAGIC_HELMET.get(), REINFORCED_MAGIC_CHESTPLATE.get(), REINFORCED_MAGIC_LEGGINGS.get(), REINFORCED_MAGIC_BOOTS.get(), REINFORCED_MAGIC_PICKAXE.get(), REINFORCED_MAGIC_AXE.get(), REINFORCED_MAGIC_SHOVEL.get(), REINFORCED_MAGIC_SWORD.get(), REINFORCED_MAGIC_HOE.get()))); + this.addSlot(new MultiItemSlotItemHandler(tile.getInventory(), 3,15,53, Arrays.asList(MAGIC_GEM.get(), MAGIC_BLOCK_ITEM.get()))); + + this.trackInt(fuel = new FunctionalIntReferenceHolder(() -> this.tileEntity.fuel, + value -> this.tileEntity.fuel = value)); + + } + //Client constructor + public MagicPressContainer(final int windowID, final PlayerInventory playerInv, final PacketBuffer data) { + this(windowID, playerInv, getTileEntity(playerInv, data)); + } + + private static MagicPressTileEntity getTileEntity(final PlayerInventory playerInv, final PacketBuffer data) { + Objects.requireNonNull(playerInv, "playerInv cannot be null"); + Objects.requireNonNull(data, "data cannot be null"); + final TileEntity tileAtPos = playerInv.player.world.getTileEntity(data.readBlockPos()); + if (tileAtPos instanceof MagicPressTileEntity) { + return (MagicPressTileEntity) tileAtPos; + } + throw new IllegalStateException("TileEntity is not correct " + tileAtPos); + } + + @Override + public boolean canInteractWith(PlayerEntity playerIn) { + return isWithinUsableDistance(canInteractWithCallable, playerIn, RegistryHandler.MAGIC_PRESS.get()); + } + + @Nonnull + @Override + public ItemStack transferStackInSlot(final PlayerEntity player, final int index) { + ItemStack returnStack = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(index); + if (slot != null && slot.getHasStack()) { + final ItemStack slotStack = slot.getStack(); + returnStack = slotStack.copy(); + + final int containerSlots = this.inventorySlots.size() - player.inventory.mainInventory.size(); + if (index < containerSlots) { + if (!mergeItemStack(slotStack, containerSlots, this.inventorySlots.size(), true)) { + return ItemStack.EMPTY; + } + } else if (!mergeItemStack(slotStack, 0, containerSlots, false)) { + return ItemStack.EMPTY; + } + if (slotStack.getCount() == 0) { + slot.putStack(ItemStack.EMPTY); + } else { + slot.onSlotChanged(); + } + if (slotStack.getCount() == returnStack.getCount()) { + return ItemStack.EMPTY; + } + slot.onTake(player, slotStack); + } + return returnStack; + } + + @OnlyIn(Dist.CLIENT) + public int getFuelScaled() { + return this.fuel.get() != 0 && this.tileEntity.fuel != 0 ? this.fuel.get() * 112 / this.tileEntity.maxFuel : 0; + } +} diff --git a/src/main/java/com/pitheguy/magicmod/container/itemhandlers/MultiItemSlotItemHandler.java b/src/main/java/com/pitheguy/magicmod/container/itemhandlers/MultiItemSlotItemHandler.java new file mode 100644 index 0000000..2dcce5e --- /dev/null +++ b/src/main/java/com/pitheguy/magicmod/container/itemhandlers/MultiItemSlotItemHandler.java @@ -0,0 +1,22 @@ +package com.pitheguy.magicmod.container.itemhandlers; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.SlotItemHandler; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class MultiItemSlotItemHandler extends SlotItemHandler { + final List validItem; + public MultiItemSlotItemHandler(IItemHandler itemHandler, int index, int xPosition, int yPosition, List validItem) { + super(itemHandler, index, xPosition, yPosition); + this.validItem = validItem; + } + + @Override + public boolean isItemValid(@NotNull ItemStack stack) { + return validItem.contains(stack.getItem()) && super.isItemValid(stack); + } +} diff --git a/src/main/java/com/pitheguy/magicmod/container/itemhandlers/magicinfuser/SingleItemSlotItemHandler.java b/src/main/java/com/pitheguy/magicmod/container/itemhandlers/SingleItemSlotItemHandler.java similarity index 91% rename from src/main/java/com/pitheguy/magicmod/container/itemhandlers/magicinfuser/SingleItemSlotItemHandler.java rename to src/main/java/com/pitheguy/magicmod/container/itemhandlers/SingleItemSlotItemHandler.java index 8a40b58..67f39e1 100644 --- a/src/main/java/com/pitheguy/magicmod/container/itemhandlers/magicinfuser/SingleItemSlotItemHandler.java +++ b/src/main/java/com/pitheguy/magicmod/container/itemhandlers/SingleItemSlotItemHandler.java @@ -1,4 +1,4 @@ -package com.pitheguy.magicmod.container.itemhandlers.magicinfuser; +package com.pitheguy.magicmod.container.itemhandlers; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/pitheguy/magicmod/init/ModContainerTypes.java b/src/main/java/com/pitheguy/magicmod/init/ModContainerTypes.java index a883283..82b25f4 100644 --- a/src/main/java/com/pitheguy/magicmod/init/ModContainerTypes.java +++ b/src/main/java/com/pitheguy/magicmod/init/ModContainerTypes.java @@ -2,6 +2,7 @@ import com.pitheguy.magicmod.container.MagicCrateContainer; import com.pitheguy.magicmod.container.MagicInfuserContainer; +import com.pitheguy.magicmod.container.MagicPressContainer; import net.minecraft.inventory.container.ContainerType; import net.minecraftforge.common.extensions.IForgeContainerType; import net.minecraftforge.fml.RegistryObject; @@ -15,4 +16,6 @@ public class ModContainerTypes { .register("magic_infuser", () -> IForgeContainerType.create(MagicInfuserContainer::new)); public static final RegistryObject> MAGIC_CRATE = CONTAINER_TYPES .register("magic_crate", () -> IForgeContainerType.create(MagicCrateContainer::new)); + public static final RegistryObject> MAGIC_PRESS = CONTAINER_TYPES + .register("magic_press", () -> IForgeContainerType.create(MagicPressContainer::new)); } diff --git a/src/main/java/com/pitheguy/magicmod/init/ModTileEntityTypes.java b/src/main/java/com/pitheguy/magicmod/init/ModTileEntityTypes.java index 1dacc0c..a9d70f4 100644 --- a/src/main/java/com/pitheguy/magicmod/init/ModTileEntityTypes.java +++ b/src/main/java/com/pitheguy/magicmod/init/ModTileEntityTypes.java @@ -2,6 +2,7 @@ import com.pitheguy.magicmod.tileentity.MagicCrateTileEntity; import com.pitheguy.magicmod.tileentity.MagicInfuserTileEntity; +import com.pitheguy.magicmod.tileentity.MagicPressTileEntity; import com.pitheguy.magicmod.util.RegistryHandler; import net.minecraft.tileentity.TileEntityType; import net.minecraftforge.fml.RegistryObject; @@ -13,4 +14,5 @@ public class ModTileEntityTypes { ForgeRegistries.TILE_ENTITIES, "magicmod"); public static final RegistryObject> MAGIC_INFUSER = TILE_ENTITY_TYPES.register("magic_infuser",() -> TileEntityType.Builder.create(MagicInfuserTileEntity::new, RegistryHandler.MAGIC_INFUSER.get()).build(null)); public static final RegistryObject> MAGIC_CRATE = TILE_ENTITY_TYPES.register("magic_crate",() -> TileEntityType.Builder.create(MagicCrateTileEntity::new, RegistryHandler.MAGIC_CRATE.get()).build(null)); + public static final RegistryObject> MAGIC_PRESS = TILE_ENTITY_TYPES.register("magic_press",() -> TileEntityType.Builder.create(MagicPressTileEntity::new, RegistryHandler.MAGIC_PRESS.get()).build(null)); } \ No newline at end of file diff --git a/src/main/java/com/pitheguy/magicmod/tileentity/MagicPressTileEntity.java b/src/main/java/com/pitheguy/magicmod/tileentity/MagicPressTileEntity.java new file mode 100644 index 0000000..e838586 --- /dev/null +++ b/src/main/java/com/pitheguy/magicmod/tileentity/MagicPressTileEntity.java @@ -0,0 +1,158 @@ +package com.pitheguy.magicmod.tileentity; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.pitheguy.magicmod.container.MagicPressContainer; +import com.pitheguy.magicmod.init.ModTileEntityTypes; +import com.pitheguy.magicmod.util.ModItemHandler; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SUpdateTileEntityPacket; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; + +import javax.annotation.Nullable; +import java.util.Map; + +import static com.pitheguy.magicmod.util.RegistryHandler.*; + +public class MagicPressTileEntity extends TileEntity implements ITickableTileEntity, INamedContainerProvider { + private ITextComponent customName; + private final ModItemHandler inventory; + public int fuel = 0; + public final int maxFuel = 20; + public static final Map ITEM_FUEL_AMOUNT = Maps.newHashMap(ImmutableMap.of(MAGIC_GEM.get(), 2, MAGIC_BLOCK_ITEM.get(), 18)); + public static final Map RECIPES = Maps.newHashMap(new ImmutableMap.Builder() + .put(MAGIC_HELMET.get(),REINFORCED_MAGIC_HELMET.get()) + .put(MAGIC_CHESTPLATE.get(),REINFORCED_MAGIC_CHESTPLATE.get()) + .put(MAGIC_LEGGINGS.get(),REINFORCED_MAGIC_LEGGINGS.get()) + .put(MAGIC_BOOTS.get(),REINFORCED_MAGIC_BOOTS.get()) + .put(MAGIC_PICKAXE.get(),REINFORCED_MAGIC_PICKAXE.get()) + .put(MAGIC_AXE.get(),REINFORCED_MAGIC_AXE.get()) + .put(MAGIC_SHOVEL.get(),REINFORCED_MAGIC_SHOVEL.get()) + .put(MAGIC_SWORD.get(),REINFORCED_MAGIC_SWORD.get()) + .put(MAGIC_HOE.get(),REINFORCED_MAGIC_HOE.get()) + .build()); + public MagicPressTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + this.inventory = new ModItemHandler(10); + } + + public MagicPressTileEntity() { + this(ModTileEntityTypes.MAGIC_PRESS.get()); + } + + @Override + public void read(CompoundNBT compound) { + super.read(compound); + NonNullList inv = NonNullList.withSize(this.inventory.getSlots(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(compound, inv); + this.inventory.setNonNullList(inv); + this.fuel = compound.getInt("Fuel"); + } + + @Override + public CompoundNBT write(CompoundNBT compound) { + super.write(compound); + ItemStackHelper.saveAllItems(compound, this.inventory.toNonNullList()); + compound.putInt("Fuel", this.fuel); + return compound; + } + + public final IItemHandlerModifiable getInventory() { + return this.inventory; + } + + @Nullable + @Override + public SUpdateTileEntityPacket getUpdatePacket() { + CompoundNBT nbt = new CompoundNBT(); + this.write(nbt); + return new SUpdateTileEntityPacket(this.pos, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, SUpdateTileEntityPacket pkt) { + this.read(pkt.getNbtCompound()); + } + + @Override + public CompoundNBT getUpdateTag() { + CompoundNBT nbt = new CompoundNBT(); + this.write(nbt); + return nbt; + } + + @Override + public void handleUpdateTag(CompoundNBT nbt) { + this.read(nbt); + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side) { + return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.orEmpty(cap, LazyOptional.of(() -> this.inventory)); + } + + @Nullable + @Override + public Container createMenu(final int windowId, final PlayerInventory playerInv, final PlayerEntity playerIn) { + return new MagicPressContainer(windowId, playerInv, this); + } + + @Override + public void tick() { + boolean dirty = false; + if (world != null && !world.isRemote()) { + while(ITEM_FUEL_AMOUNT.get(this.inventory.getStackInSlot(3).getItem()) != null && fuel <= maxFuel - ITEM_FUEL_AMOUNT.get(this.inventory.getStackInSlot(3).getItem())) { + fuel += ITEM_FUEL_AMOUNT.get(this.inventory.getStackInSlot(3).getItem()); + this.inventory.decrStackSize(3, 1); + dirty = true; + } + if (RECIPES.get(this.inventory.getStackInSlot(0).getItem()) != null && this.inventory.getStackInSlot(1).getItem() == MAGIC_PLATE.get() && this.inventory.getStackInSlot(1).getCount() >= 8 && fuel >= 1) { + fuel--; + this.inventory.insertItem(2,new ItemStack(RECIPES.get(this.inventory.getStackInSlot(0).getItem()), 1), false); + this.inventory.decrStackSize(0,1); + this.inventory.decrStackSize(1,8); + dirty = true; + } + } + if(dirty) this.markDirty(); + } + public void setCustomName(ITextComponent name) { + this.customName = name; + } + + public ITextComponent getName() { + return this.customName != null ? this.customName : this.getDefaultName(); + } + + private ITextComponent getDefaultName() { + return new TranslationTextComponent("container.magicmod.magic_press"); + } + + @Override + public ITextComponent getDisplayName() { + return this.getName(); + } + + @Nullable + public ITextComponent getCustomName() { + return this.customName; + } +} \ No newline at end of file diff --git a/src/main/java/com/pitheguy/magicmod/util/FunctionalIntReferenceHolder.java b/src/main/java/com/pitheguy/magicmod/util/FunctionalIntReferenceHolder.java new file mode 100644 index 0000000..073cded --- /dev/null +++ b/src/main/java/com/pitheguy/magicmod/util/FunctionalIntReferenceHolder.java @@ -0,0 +1,27 @@ +package com.pitheguy.magicmod.util; + +import net.minecraft.util.IntReferenceHolder; + +import java.util.function.IntConsumer; +import java.util.function.IntSupplier; + +public class FunctionalIntReferenceHolder extends IntReferenceHolder { + + private final IntSupplier getter; + private final IntConsumer setter; + + public FunctionalIntReferenceHolder(final IntSupplier getter, final IntConsumer setter) { + this.getter = getter; + this.setter = setter; + } + + @Override + public int get() { + return this.getter.getAsInt(); + } + + @Override + public void set(final int value) { + this.setter.accept(value); + } +} \ No newline at end of file diff --git a/src/main/java/com/pitheguy/magicmod/util/RegistryHandler.java b/src/main/java/com/pitheguy/magicmod/util/RegistryHandler.java index 05fba8e..d2285bf 100644 --- a/src/main/java/com/pitheguy/magicmod/util/RegistryHandler.java +++ b/src/main/java/com/pitheguy/magicmod/util/RegistryHandler.java @@ -106,6 +106,9 @@ public static void init() { public static final RegistryObject MAGIC_GLUE_BLOCK = BLOCKS.register("magic_glue_block", MagicGlueBlock::new); public static final RegistryObject MAGIC_INFUSER = BLOCKS.register("magic_infuser", MagicInfuser::new); public static final RegistryObject MAGIC_CRATE = BLOCKS.register("magic_crate", MagicCrate::new); + public static final RegistryObject MAGIC_PRESS = BLOCKS.register("magic_press", MagicPress::new); + + //Magic Lamps public static final RegistryObject MAGIC_LAMP_RED = BLOCKS.register("magic_lamp_red", MagicLamp::new); public static final RegistryObject MAGIC_LAMP_ORANGE = BLOCKS.register("magic_lamp_orange", MagicLamp::new); public static final RegistryObject MAGIC_LAMP_YELLOW = BLOCKS.register("magic_lamp_yellow", MagicLamp::new); @@ -125,6 +128,9 @@ public static void init() { public static final RegistryObject MAGIC_GLUE_BLOCK_ITEM = ITEMS.register("magic_glue_block", () -> new BlockItemBase(MAGIC_GLUE_BLOCK.get())); public static final RegistryObject MAGIC_INFUSER_ITEM = ITEMS.register("magic_infuser", () -> new BlockItemBase(MAGIC_INFUSER.get())); public static final RegistryObject MAGIC_CRATE_ITEM = ITEMS.register("magic_crate", () -> new BlockItemBase(MAGIC_CRATE.get())); + public static final RegistryObject MAGIC_PRESS_ITEM = ITEMS.register("magic_press", () -> new BlockItemBase(MAGIC_PRESS.get())); + + //Magic Lamps public static final RegistryObject MAGIC_LAMP_RED_ITEM = ITEMS.register("magic_lamp_red", () -> new BlockItemBase(MAGIC_LAMP_RED.get())); public static final RegistryObject MAGIC_LAMP_ORANGE_ITEM = ITEMS.register("magic_lamp_orange", () -> new BlockItemBase(MAGIC_LAMP_ORANGE.get())); public static final RegistryObject MAGIC_LAMP_YELLOW_ITEM = ITEMS.register("magic_lamp_yellow", () -> new BlockItemBase(MAGIC_LAMP_YELLOW.get())); diff --git a/src/main/resources/assets/magicmod/blockstates/magic_press.json b/src/main/resources/assets/magicmod/blockstates/magic_press.json new file mode 100644 index 0000000..7ca01a8 --- /dev/null +++ b/src/main/resources/assets/magicmod/blockstates/magic_press.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "magicmod:block/magic_press" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/magicmod/lang/en_us.json b/src/main/resources/assets/magicmod/lang/en_us.json index 6ee559a..fad2ca8 100644 --- a/src/main/resources/assets/magicmod/lang/en_us.json +++ b/src/main/resources/assets/magicmod/lang/en_us.json @@ -48,6 +48,7 @@ "block.magicmod.magic_glue_block": "Magic Glue Block", "block.magicmod.magic_infuser": "Magic Infuser", "block.magicmod.magic_crate": "Magic Crate", + "block.magicmod.magic_press": "Magic Press", "block.magicmod.magic_lamp_red": "Magic Lamp (Red)", "block.magicmod.magic_lamp_orange": "Magic Lamp (Orange)", "block.magicmod.magic_lamp_yellow": "Magic Lamp (Yellow)", @@ -58,5 +59,6 @@ "block.magicmod.magic_lamp_black": "Magic Lamp (Black)", "block.magicmod.magic_lamp_white": "Magic Lamp (White)", "container.magicmod.magic_infuser": "Magic Infuser", - "container.magicmod.magic_crate": "Magic Crate" + "container.magicmod.magic_crate": "Magic Crate", + "container.magicmod.magic_press": "Magic Press" } \ No newline at end of file diff --git a/src/main/resources/assets/magicmod/models/block/magic_press.json b/src/main/resources/assets/magicmod/models/block/magic_press.json new file mode 100644 index 0000000..382c8a6 --- /dev/null +++ b/src/main/resources/assets/magicmod/models/block/magic_press.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cube_bottom_top", + "textures": { + "side": "magicmod:blocks/magic_press_side", + "top": "magicmod:blocks/magic_press_top", + "bottom": "magicmod:blocks/magic_press_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/magicmod/models/item/magic_press.json b/src/main/resources/assets/magicmod/models/item/magic_press.json new file mode 100644 index 0000000..e997770 --- /dev/null +++ b/src/main/resources/assets/magicmod/models/item/magic_press.json @@ -0,0 +1,3 @@ +{ + "parent": "magicmod:block/magic_press" +} \ No newline at end of file diff --git a/src/main/resources/assets/magicmod/textures/blocks/magic_press_side.png b/src/main/resources/assets/magicmod/textures/blocks/magic_press_side.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8a723628f39569e768e822ba13e57db7a3bcc6 GIT binary patch literal 1184 zcmV;R1Yi4!P)EX>4Tx04R}tkv&MmKpe$i(`rR34(%Y~5TQC*5EXHhDi*;)X)CnqU~=h)(4-+r zad8w}3l4rPRvlcNb#-tR1i=pwM<*vm7b)?7NufoI2gm(*ckglc4iFj@rka6qK-DZG zorsIM{E8TSMF8ChV;CWcnR+s_kcH>?x`&UicQKyjeeTcErxZ*E_(bAarW+RVI`QTkxkDLM~KBz2g@DI%7#ijMI2RBjq-(@ z%L?Z$&T6H`TKD8H3>CEH4A*H6A%R6Ck%9;rHEf^)3o%+XQcR?2Kknflbo?oD$>iDq zBgZ_dP$4;f@IUz7ty!F$aFarDpzFo9KSqGyF3_yo_V=-EH%|cnGjOG~{nZ9A^GSNW ztwoQ3{%zpmx~<83z~v4w@T5zIFn*_Gp+u907x=&mYV7RegFUf24YJ`L;!#Q0094Gr{rJ&000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&C^6(uT7JGATo00NvzL_t(I%XO2f9X;)Y8Po)pv~wP@X_(pnXf zh^ClOwGxuF&Guf}m!F5cCWttf8NT27&39&gjMM=FK%-(aO*Fc?)zm{T=HEMSu%3CPrf zO^3YxcZ)^9s>oPp$Y6)YMerj&UA@$$vj*gG3)q}M9&{aSHd93hAq2&u!0U%!1;Ab@ zuBuSw0@+#zS*^5(f&ig{mID+>XEnwqvLp;BOqCuhrho=a36P_d+84kKH;nuO+5Cp7 z$th}7g_t>>Y^#hY0V*KT*(&Y?PvS}U0^o8~Rg#v42#3RX(!GD-0AEBKM;=^4Mw>@8 z8pWZc7>$qPt#g)>CPcW*U$TX4l_D+LGdvUFQBXHEX>4Tx04R}tkv&MmKpe$i(`rR34(%Y~5TQC*5EXHhDi*;)X)CnqU~=h)(4-+r zad8w}3l4rPRvlcNb#-tR1i=pwM<*vm7b)?7NufoI2gm(*ckglc4iFj@rka6qK-DZG zorsIM{E8TSMF8ChV;CWcnR+s_kcH>?x`&UicQKyjeeTcErxZ*E_(bAarW+RVI`QTkxkDLM~KBz2g@DI%7#ijMI2RBjq-(@ z%L?Z$&T6H`TKD8H3>CEH4A*H6A%R6Ck%9;rHEf^)3o%+XQcR?2Kknflbo?oD$>iDq zBgZ_dP$4;f@IUz7ty!F$aFarDpzFo9KSqGyF3_yo_V=-EH%|cnGjOG~{nZ9A^GSNW ztwoQ3{%zpmx~<83z~v4w@T5zIFn*_Gp+u907x=&mYV7RegFUf24YJ`L;!#Q0094Gr{rJ&000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&C_0Rk8tWlZw`00Ey#L_t(I%XQPwQWHTC2Jl}t zlPsGAf}#dWt0?8>6L|79d~7dXIcO>P4e$$wSA}? znu2PEKJ$kDE*DGcMSHlP3RGA$gwI;}4SG-bdQRBckiT)YkgstE1;Quq@E41AUPnVN zr`rw5195@CV7L+J3#wNrQ4{M_akxzoH~h5X=s3-}6qLKnYxJmt|5~xf{JMQYziWyE z>W<(GZtu0WZhl3tc))PI-H0A~6P>>IO|ZW)@&i2+a~~gx$mCX{OfGYvYbZ>dShxU7 z5ob8lLpLc}rY3YZREE3nrJ*il79I%=O0jbh1|QL*17-y002ovPDHLk FV1fc}qP+kB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/magicmod/textures/gui/magic_press.png b/src/main/resources/assets/magicmod/textures/gui/magic_press.png new file mode 100644 index 0000000000000000000000000000000000000000..7d700cce66f17485bd11920cc06d4b2134719c6c GIT binary patch literal 14463 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 HOoIOpLHbk> literal 0 HcmV?d00001 diff --git a/src/main/resources/data/magicmod/advancements/recipes/reinforced_magic_items.json b/src/main/resources/data/magicmod/advancements/recipes/reinforced_magic_items.json index ca60ad2..72a424c 100644 --- a/src/main/resources/data/magicmod/advancements/recipes/reinforced_magic_items.json +++ b/src/main/resources/data/magicmod/advancements/recipes/reinforced_magic_items.json @@ -12,7 +12,8 @@ "magicmod:reinforced_magic_leggings", "magicmod:reinforced_magic_boots", "magicmod:magic_obsidian", - "magicmod:magic_crate" + "magicmod:magic_crate", + "magicmod:magic_press" ] }, "criteria": { diff --git a/src/main/resources/data/magicmod/recipes/magic_press.json b/src/main/resources/data/magicmod/recipes/magic_press.json new file mode 100644 index 0000000..21a8d3f --- /dev/null +++ b/src/main/resources/data/magicmod/recipes/magic_press.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:crafting_shaped", + + "pattern": + [ + "GRG", + "GPG", + "GMG" + ], + + "key": + { + "G": + { + "item": "magicmod:magic_gem" + }, + "R": + { + "item": "minecraft:redstone_block" + }, + "P": + { + "item": "minecraft:piston" + }, + "M": + { + "item": "magicmod:magic_plate" + } + }, + + "result": + { + "item": "magicmod:magic_chestplate", + "count": 1 + } +} \ No newline at end of file