diff --git a/src/generated/resources/assets/cryptoworld/blockstates/miner_block.json b/src/generated/resources/assets/cryptoworld/blockstates/miner_block.json new file mode 100644 index 0000000..a4e25ec --- /dev/null +++ b/src/generated/resources/assets/cryptoworld/blockstates/miner_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "cryptoworld:block/miner_block" + } + } +} diff --git a/src/generated/resources/assets/cryptoworld/models/block/miner_block.json b/src/generated/resources/assets/cryptoworld/models/block/miner_block.json new file mode 100644 index 0000000..9c69d7e --- /dev/null +++ b/src/generated/resources/assets/cryptoworld/models/block/miner_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "cryptoworld:block/miner_block" + } +} diff --git a/src/generated/resources/assets/cryptoworld/models/item/miner_block.json b/src/generated/resources/assets/cryptoworld/models/item/miner_block.json new file mode 100644 index 0000000..8669fed --- /dev/null +++ b/src/generated/resources/assets/cryptoworld/models/item/miner_block.json @@ -0,0 +1,3 @@ +{ + "parent": "cryptoworld:block/miner_block" +} diff --git a/src/generated/resources/data/cryptoworld/loot_tables/blocks/miner_block.json b/src/generated/resources/data/cryptoworld/loot_tables/blocks/miner_block.json new file mode 100644 index 0000000..c830d07 --- /dev/null +++ b/src/generated/resources/data/cryptoworld/loot_tables/blocks/miner_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "cryptoworld:miner_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "cryptoworld:blocks/miner_block" +} diff --git a/src/generated/resources/data/cryptoworld/recipes/miner_block.json b/src/generated/resources/data/cryptoworld/recipes/miner_block.json new file mode 100644 index 0000000..7b12106 --- /dev/null +++ b/src/generated/resources/data/cryptoworld/recipes/miner_block.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "IGI", + "RFR", + "III" + ], + "key": { + "I": { "item": "minecraft:iron_ingot" }, + "G": { "item": "cryptoworld:gtx_1080" }, + "R": { "item": "cryptoworld:ram" }, + "F": { "item": "cryptoworld:silicium_hypercharged" } + }, + "result": { "item": "cryptoworld:miner_block" } +} diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index fe29ea5..29e2c36 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -5,6 +5,7 @@ "cryptoworld:cryptonium_block", "cryptoworld:server_block", "cryptoworld:silicium_ore", - "cryptoworld:silicium_block" + "cryptoworld:silicium_block", + "cryptoworld:miner_block" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/needs_iron_tool.json b/src/generated/resources/data/minecraft/tags/blocks/needs_iron_tool.json index e2e6cb6..5865945 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/needs_iron_tool.json +++ b/src/generated/resources/data/minecraft/tags/blocks/needs_iron_tool.json @@ -1,6 +1,7 @@ { "values": [ "cryptoworld:silicium_ore", - "cryptoworld:server_block" + "cryptoworld:server_block", + "cryptoworld:miner_block" ] } \ No newline at end of file diff --git a/src/main/java/fr/jachou/cryptoworld/CryptoWorld.java b/src/main/java/fr/jachou/cryptoworld/CryptoWorld.java index eb900d5..9eda742 100644 --- a/src/main/java/fr/jachou/cryptoworld/CryptoWorld.java +++ b/src/main/java/fr/jachou/cryptoworld/CryptoWorld.java @@ -1,6 +1,10 @@ package fr.jachou.cryptoworld; import fr.jachou.cryptoworld.block.ModBlocks; +import fr.jachou.cryptoworld.blockentity.ModBlockEntities; +import fr.jachou.cryptoworld.menu.ModMenuTypes; +import fr.jachou.cryptoworld.screen.MinerScreen; +import net.minecraft.client.gui.screens.MenuScreens; import fr.jachou.cryptoworld.datagen.DataGenerators; import fr.jachou.cryptoworld.item.ModCreativeModTabs; import fr.jachou.cryptoworld.item.ModItems; @@ -24,6 +28,8 @@ public CryptoWorld() { ModCreativeModTabs.register(bus); ModItems.register(bus); ModBlocks.register(bus); + ModBlockEntities.register(bus); + ModMenuTypes.register(bus); bus.addListener(this::setup); MinecraftForge.EVENT_BUS.register(this); @@ -43,5 +49,6 @@ private void setup(final FMLCommonSetupEvent event) { } private void doClientStuff(final FMLClientSetupEvent event) { + MenuScreens.register(ModMenuTypes.MINER_MENU.get(), MinerScreen::new); } } diff --git a/src/main/java/fr/jachou/cryptoworld/block/MinerBlock.java b/src/main/java/fr/jachou/cryptoworld/block/MinerBlock.java new file mode 100644 index 0000000..a4fecf5 --- /dev/null +++ b/src/main/java/fr/jachou/cryptoworld/block/MinerBlock.java @@ -0,0 +1,51 @@ +package fr.jachou.cryptoworld.block; + +import fr.jachou.cryptoworld.blockentity.MinerBlockEntity; +import fr.jachou.cryptoworld.blockentity.ModBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraftforge.network.NetworkHooks; +import org.jetbrains.annotations.Nullable; + +public class MinerBlock extends Block implements EntityBlock { + public MinerBlock(Properties properties) { + super(properties); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, + InteractionHand hand, BlockHitResult hit) { + if (!level.isClientSide) { + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof MinerBlockEntity) { + NetworkHooks.openScreen((ServerPlayer) player, (MinerBlockEntity) blockEntity, pos); + } else { + throw new IllegalStateException("Missing miner block entity!"); + } + } + return InteractionResult.sidedSuccess(level.isClientSide); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new MinerBlockEntity(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { + return level.isClientSide ? null : createTickerHelper(type, ModBlockEntities.MINER_BLOCK_ENTITY.get(), MinerBlockEntity::tick); + } +} diff --git a/src/main/java/fr/jachou/cryptoworld/block/ModBlocks.java b/src/main/java/fr/jachou/cryptoworld/block/ModBlocks.java index beea685..a064324 100644 --- a/src/main/java/fr/jachou/cryptoworld/block/ModBlocks.java +++ b/src/main/java/fr/jachou/cryptoworld/block/ModBlocks.java @@ -1,6 +1,7 @@ package fr.jachou.cryptoworld.block; import fr.jachou.cryptoworld.CryptoWorld; +import fr.jachou.cryptoworld.block.MinerBlock; import fr.jachou.cryptoworld.item.ModItems; import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.item.BlockItem; @@ -21,6 +22,9 @@ public class ModBlocks { public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, CryptoWorld.MODID); + public static final RegistryObject MINER_BLOCK = registerBlock("miner_block", + () -> new MinerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK))); + public static final RegistryObject SERVER_BLOCK = registerBlock("server_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK))); diff --git a/src/main/java/fr/jachou/cryptoworld/blockentity/MinerBlockEntity.java b/src/main/java/fr/jachou/cryptoworld/blockentity/MinerBlockEntity.java new file mode 100644 index 0000000..15a01ec --- /dev/null +++ b/src/main/java/fr/jachou/cryptoworld/blockentity/MinerBlockEntity.java @@ -0,0 +1,119 @@ +package fr.jachou.cryptoworld.blockentity; + +import fr.jachou.cryptoworld.item.ModItems; +import fr.jachou.cryptoworld.menu.MinerMenu; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class MinerBlockEntity extends BlockEntity implements net.minecraft.world.MenuProvider { + private final ItemStackHandler itemHandler = new ItemStackHandler(4) { + @Override + protected void onContentsChanged(int slot) { + setChanged(); + } + + @Override + public boolean isItemValid(int slot, @NotNull ItemStack stack) { + return switch (slot) { + case 0 -> stack.is(ModItems.GTX_1080.get()) || stack.is(ModItems.RTX_2080.get()); + case 1 -> stack.is(ModItems.RAM.get()); + case 2 -> stack.is(ModItems.SILICIUM_HYPERCHARGED.get()); + case 3 -> stack.is(ModItems.BITCOIN.get()) || stack.is(ModItems.ETHEREUM.get()); + default -> super.isItemValid(slot, stack); + }; + } + }; + + private LazyOptional lazyItemHandler = LazyOptional.empty(); + + public MinerBlockEntity(BlockPos pos, BlockState state) { + super(ModBlockEntities.MINER_BLOCK_ENTITY.get(), pos, state); + } + + @Override + public void onLoad() { + super.onLoad(); + lazyItemHandler = LazyOptional.of(() -> itemHandler); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + lazyItemHandler.invalidate(); + } + + @NotNull + @Override + public LazyOptional getCapability(@NotNull Capability cap, @Nullable net.minecraft.core.Direction side) { + if (cap == ForgeCapabilities.ITEM_HANDLER) { + return lazyItemHandler.cast(); + } + return super.getCapability(cap, side); + } + + @Override + protected void saveAdditional(CompoundTag tag) { + tag.put("inventory", itemHandler.serializeNBT()); + super.saveAdditional(tag); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + itemHandler.deserializeNBT(tag.getCompound("inventory")); + } + + @Override + public Component getDisplayName() { + return Component.translatable("block.cryptoworld.miner_block"); + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int id, net.minecraft.world.entity.player.Inventory inventory, Player player) { + return new MinerMenu(id, inventory, this); + } + + public ItemStackHandler getItemHandler() { + return itemHandler; + } + + public static void tick(Level level, BlockPos pos, BlockState state, MinerBlockEntity entity) { + if (level.isClientSide) { + return; + } + + ItemStack gpu = entity.itemHandler.getStackInSlot(0); + ItemStack ram = entity.itemHandler.getStackInSlot(1); + ItemStack fuel = entity.itemHandler.getStackInSlot(2); + ItemStack output = entity.itemHandler.getStackInSlot(3); + + if (!gpu.isEmpty() && !ram.isEmpty() && fuel.is(ModItems.SILICIUM_HYPERCHARGED.get())) { + Item coinItem = level.random.nextBoolean() ? ModItems.BITCOIN.get() : ModItems.ETHEREUM.get(); + if (output.isEmpty()) { + entity.itemHandler.setStackInSlot(3, new ItemStack(coinItem)); + fuel.shrink(1); + setChanged(level, pos, state); + } else if (output.is(coinItem) && output.getCount() < output.getMaxStackSize()) { + output.grow(1); + fuel.shrink(1); + setChanged(level, pos, state); + } + } + } +} diff --git a/src/main/java/fr/jachou/cryptoworld/blockentity/ModBlockEntities.java b/src/main/java/fr/jachou/cryptoworld/blockentity/ModBlockEntities.java new file mode 100644 index 0000000..79df6e6 --- /dev/null +++ b/src/main/java/fr/jachou/cryptoworld/blockentity/ModBlockEntities.java @@ -0,0 +1,21 @@ +package fr.jachou.cryptoworld.blockentity; + +import fr.jachou.cryptoworld.CryptoWorld; +import fr.jachou.cryptoworld.block.ModBlocks; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ModBlockEntities { + public static final DeferredRegister> BLOCK_ENTITIES = + DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, CryptoWorld.MODID); + + public static final RegistryObject> MINER_BLOCK_ENTITY = BLOCK_ENTITIES.register("miner_block_entity", + () -> BlockEntityType.Builder.of(MinerBlockEntity::new, ModBlocks.MINER_BLOCK.get()).build(null)); + + public static void register(IEventBus eventBus) { + BLOCK_ENTITIES.register(eventBus); + } +} diff --git a/src/main/java/fr/jachou/cryptoworld/datagen/ModBlockStateProvider.java b/src/main/java/fr/jachou/cryptoworld/datagen/ModBlockStateProvider.java index 5beb974..72be535 100644 --- a/src/main/java/fr/jachou/cryptoworld/datagen/ModBlockStateProvider.java +++ b/src/main/java/fr/jachou/cryptoworld/datagen/ModBlockStateProvider.java @@ -24,6 +24,7 @@ protected void registerStatesAndModels() { blockWithItem(ModBlocks.SILICIUM_ORE); blockWithItem(ModBlocks.SILICIUM_BLOCK); blockWithItem(ModBlocks.SERVER_BLOCK); + blockWithItem(ModBlocks.MINER_BLOCK); } private void blockWithItem(RegistryObject blockRegistryObject) { diff --git a/src/main/java/fr/jachou/cryptoworld/datagen/ModBlockTagGenerator.java b/src/main/java/fr/jachou/cryptoworld/datagen/ModBlockTagGenerator.java index 7b2a274..8c73e1a 100644 --- a/src/main/java/fr/jachou/cryptoworld/datagen/ModBlockTagGenerator.java +++ b/src/main/java/fr/jachou/cryptoworld/datagen/ModBlockTagGenerator.java @@ -29,12 +29,15 @@ protected void addTags(HolderLookup.Provider provider) { ModBlocks.CRYPTONIUM_BLOCK.get(), ModBlocks.SERVER_BLOCK.get(), ModBlocks.SILICIUM_ORE.get(), - ModBlocks.SILICIUM_BLOCK.get()); + ModBlocks.SILICIUM_BLOCK.get(), + ModBlocks.MINER_BLOCK.get()); this.tag(BlockTags.NEEDS_DIAMOND_TOOL) .add(ModBlocks.CRYPTONIUM_ORE.get()).add(ModBlocks.CRYPTONIUM_BLOCK.get()); this.tag(BlockTags.NEEDS_IRON_TOOL) - .add(ModBlocks.SILICIUM_ORE.get()).add(ModBlocks.SERVER_BLOCK.get()); + .add(ModBlocks.SILICIUM_ORE.get()) + .add(ModBlocks.SERVER_BLOCK.get()) + .add(ModBlocks.MINER_BLOCK.get()); } } diff --git a/src/main/java/fr/jachou/cryptoworld/datagen/ModRecipeProvider.java b/src/main/java/fr/jachou/cryptoworld/datagen/ModRecipeProvider.java index 8c394a9..6a0c9e4 100644 --- a/src/main/java/fr/jachou/cryptoworld/datagen/ModRecipeProvider.java +++ b/src/main/java/fr/jachou/cryptoworld/datagen/ModRecipeProvider.java @@ -64,6 +64,17 @@ protected void buildRecipes(RecipeOutput recipeOutput) { .save(recipeOutput); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.MINER_BLOCK.get()) + .pattern("IGI") + .pattern("RFR") + .pattern("III") + .define('I', Items.IRON_INGOT) + .define('G', ModItems.GTX_1080.get()) + .define('R', ModItems.RAM.get()) + .define('F', ModItems.SILICIUM_HYPERCHARGED.get()) + .unlockedBy(getHasName(ModItems.GTX_1080.get()), has(ModItems.GTX_1080.get())) + .save(recipeOutput); + } protected static void oreCooking(RecipeOutput pRecipeOutput, RecipeSerializer pCookingSerializer, diff --git a/src/main/java/fr/jachou/cryptoworld/datagen/loot/ModBlockLootTables.java b/src/main/java/fr/jachou/cryptoworld/datagen/loot/ModBlockLootTables.java index 2dead1c..c88dc6f 100644 --- a/src/main/java/fr/jachou/cryptoworld/datagen/loot/ModBlockLootTables.java +++ b/src/main/java/fr/jachou/cryptoworld/datagen/loot/ModBlockLootTables.java @@ -23,6 +23,7 @@ protected void generate() { this.dropSelf(ModBlocks.CRYPTONIUM_ORE.get()); this.dropSelf(ModBlocks.SERVER_BLOCK.get()); this.dropSelf(ModBlocks.SILICIUM_ORE.get()); + this.dropSelf(ModBlocks.MINER_BLOCK.get()); } @Override diff --git a/src/main/java/fr/jachou/cryptoworld/item/ModCreativeModTabs.java b/src/main/java/fr/jachou/cryptoworld/item/ModCreativeModTabs.java index aeb5993..9754829 100644 --- a/src/main/java/fr/jachou/cryptoworld/item/ModCreativeModTabs.java +++ b/src/main/java/fr/jachou/cryptoworld/item/ModCreativeModTabs.java @@ -36,6 +36,7 @@ public class ModCreativeModTabs { pOutput.accept(ModBlocks.SILICIUM_ORE.get()); pOutput.accept(ModBlocks.CRYPTONIUM_BLOCK.get()); pOutput.accept(ModBlocks.SILICIUM_BLOCK.get()); + pOutput.accept(ModBlocks.MINER_BLOCK.get()); }) .build()); diff --git a/src/main/java/fr/jachou/cryptoworld/menu/MinerMenu.java b/src/main/java/fr/jachou/cryptoworld/menu/MinerMenu.java new file mode 100644 index 0000000..65b72c0 --- /dev/null +++ b/src/main/java/fr/jachou/cryptoworld/menu/MinerMenu.java @@ -0,0 +1,79 @@ +package fr.jachou.cryptoworld.menu; + +import fr.jachou.cryptoworld.block.ModBlocks; +import fr.jachou.cryptoworld.blockentity.MinerBlockEntity; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.SlotItemHandler; + +public class MinerMenu extends AbstractContainerMenu { + private final MinerBlockEntity blockEntity; + private final ContainerLevelAccess access; + + public MinerMenu(int id, Inventory inv, FriendlyByteBuf extraData) { + this(id, inv, (MinerBlockEntity) inv.player.level().getBlockEntity(extraData.readBlockPos())); + } + + public MinerMenu(int id, Inventory inv, MinerBlockEntity entity) { + super(ModMenuTypes.MINER_MENU.get(), id); + this.blockEntity = entity; + this.access = ContainerLevelAccess.create(entity.getLevel(), entity.getBlockPos()); + + this.addSlot(new SlotItemHandler(entity.getItemHandler(), 0, 26, 17)); // GPU + this.addSlot(new SlotItemHandler(entity.getItemHandler(), 1, 26, 53)); // RAM + this.addSlot(new SlotItemHandler(entity.getItemHandler(), 2, 56, 53)); // Fuel + this.addSlot(new SlotItemHandler(entity.getItemHandler(), 3, 116, 35)); // Output + + addPlayerInventory(inv); + addPlayerHotbar(inv); + } + + private void addPlayerInventory(Inventory inv) { + for (int i = 0; i < 3; ++i) { + for (int j = 0; j < 9; ++j) { + this.addSlot(new Slot(inv, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + } + + private void addPlayerHotbar(Inventory inv) { + for (int i = 0; i < 9; ++i) { + this.addSlot(new Slot(inv, i, 8 + i * 18, 142)); + } + } + + @Override + public ItemStack quickMoveStack(Player player, int index) { + ItemStack stack = ItemStack.EMPTY; + Slot slot = this.slots.get(index); + int size = blockEntity.getItemHandler().getSlots(); + if (slot != null && slot.hasItem()) { + ItemStack stackInSlot = slot.getItem(); + stack = stackInSlot.copy(); + if (index < size) { + if (!this.moveItemStackTo(stackInSlot, size, this.slots.size(), true)) { + return ItemStack.EMPTY; + } + } else if (!this.moveItemStackTo(stackInSlot, 0, size, false)) { + return ItemStack.EMPTY; + } + + if (stackInSlot.isEmpty()) { + slot.set(ItemStack.EMPTY); + } else { + slot.setChanged(); + } + } + return stack; + } + + @Override + public boolean stillValid(Player player) { + return stillValid(this.access, player, ModBlocks.MINER_BLOCK.get()); + } +} diff --git a/src/main/java/fr/jachou/cryptoworld/menu/ModMenuTypes.java b/src/main/java/fr/jachou/cryptoworld/menu/ModMenuTypes.java new file mode 100644 index 0000000..b9bed15 --- /dev/null +++ b/src/main/java/fr/jachou/cryptoworld/menu/ModMenuTypes.java @@ -0,0 +1,21 @@ +package fr.jachou.cryptoworld.menu; + +import fr.jachou.cryptoworld.CryptoWorld; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.network.IContainerFactory; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ModMenuTypes { + public static final DeferredRegister> MENUS = + DeferredRegister.create(ForgeRegistries.MENU_TYPES, CryptoWorld.MODID); + + public static final RegistryObject> MINER_MENU = + MENUS.register("miner_menu", () -> new MenuType<>((IContainerFactory) MinerMenu::new)); + + public static void register(IEventBus eventBus) { + MENUS.register(eventBus); + } +} diff --git a/src/main/java/fr/jachou/cryptoworld/screen/MinerScreen.java b/src/main/java/fr/jachou/cryptoworld/screen/MinerScreen.java new file mode 100644 index 0000000..23dbb24 --- /dev/null +++ b/src/main/java/fr/jachou/cryptoworld/screen/MinerScreen.java @@ -0,0 +1,34 @@ +package fr.jachou.cryptoworld.screen; + +import fr.jachou.cryptoworld.menu.MinerMenu; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +public class MinerScreen extends AbstractContainerScreen { + private static final ResourceLocation TEXTURE = new ResourceLocation("minecraft", "textures/gui/container/furnace.png"); + + public MinerScreen(MinerMenu menu, Inventory inventory, Component component) { + super(menu, inventory, component); + } + + @Override + protected void init() { + super.init(); + this.inventoryLabelY = this.imageHeight - 94; + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) { + guiGraphics.blit(TEXTURE, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight); + } + + @Override + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { + this.renderBackground(guiGraphics); + super.render(guiGraphics, mouseX, mouseY, delta); + this.renderTooltip(guiGraphics, mouseX, mouseY); + } +} diff --git a/src/main/resources/assets/cryptoworld/lang/en_us.json b/src/main/resources/assets/cryptoworld/lang/en_us.json index b6bb5b1..b1751c3 100644 --- a/src/main/resources/assets/cryptoworld/lang/en_us.json +++ b/src/main/resources/assets/cryptoworld/lang/en_us.json @@ -14,6 +14,7 @@ "block.cryptoworld.silicium_ore": "Silicium Ore", "block.cryptoworld.cryptonium_block": "Cryptonium Block", "block.cryptoworld.silicium_block": "Silicium Block", + "block.cryptoworld.miner_block": "Miner", "creativetab.crypto_tab": "Crypto World", diff --git a/src/main/resources/assets/cryptoworld/lang/fr_fr.json b/src/main/resources/assets/cryptoworld/lang/fr_fr.json index 5972ca8..db58e7b 100644 --- a/src/main/resources/assets/cryptoworld/lang/fr_fr.json +++ b/src/main/resources/assets/cryptoworld/lang/fr_fr.json @@ -14,6 +14,7 @@ "block.cryptoworld.silicium_ore": "Minerai de Silicium", "block.cryptoworld.cryptonium_block": "Bloc de Cryptonium", "block.cryptoworld.silicium_block": "Bloc de Silicium", + "block.cryptoworld.miner_block": "Mineur", "creativetab.crypto_tab": "CryptoWorld", "tooltip.cryptoworld.cryptoworld_detector": "Le détecteur cryptoworld permet de détcter les minerais du monde cryptoworld"