diff --git a/gradle.properties b/gradle.properties index 18b8f4a..a447610 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,5 +15,5 @@ halplibe_version=1.0.9 # Mod mod_version=1.0.0 -mod_group=turniplabs -mod_name=examplemod +mod_group=net.brokenmoon +mod_name=afloydtubemod diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/src/main/java/net/brokenmoon/afloydtubemod/Afloydtubemod.java b/src/main/java/net/brokenmoon/afloydtubemod/Afloydtubemod.java new file mode 100644 index 0000000..5bff7eb --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/Afloydtubemod.java @@ -0,0 +1,25 @@ +package net.brokenmoon.afloydtubemod; + +import net.brokenmoon.afloydtubemod.block.BlockTransposer; +import net.fabricmc.api.ModInitializer; +import net.minecraft.src.Block; +import net.minecraft.src.Material; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import turniplabs.halplibe.helper.BlockHelper; + + +public class Afloydtubemod implements ModInitializer { + public static final String MOD_ID = "tubemod"; + public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); + + public static final Block tubeBlock = BlockHelper.createBlock(MOD_ID, new Block(904, Material.iron), "tubeBlock", "testTexture.png", Block.soundMetalFootstep, 5, 5, 0); + public static final Block transposerBlock = BlockHelper.createBlock(MOD_ID, new BlockTransposer(905, Material.iron), "transposerBlock", "testTexture.png", Block.soundMetalFootstep, 5, 5, 0); + + + @Override + public void onInitialize() { + LOGGER.info("Afloydtubemod initialized."); + + } +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/block/BlockTransposer.java b/src/main/java/net/brokenmoon/afloydtubemod/block/BlockTransposer.java new file mode 100644 index 0000000..ad1c8bc --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/block/BlockTransposer.java @@ -0,0 +1,43 @@ +package net.brokenmoon.afloydtubemod.block; + +import net.brokenmoon.afloydtubemod.mixinInterface.IEntityPlayer; +import net.brokenmoon.afloydtubemod.tileEntity.TileEntityTransposer; +import net.minecraft.src.*; + +public class BlockTransposer extends BlockContainerRotatable { + + private boolean isActive; + public BlockTransposer(int i, Material material) { + super(i, material); + this.isActive = isActive; + } + + public void onBlockAdded(World world, int i, int j, int k) { + super.onBlockAdded(world, i, j, k); + this.setDefaultDirection(world, i, j, k); + } + + @Override + public boolean blockActivated(World world, int x, int y, int z, EntityPlayer entityplayer) { + IInventory inventory = (TileEntityTransposer)world.getBlockTileEntity(x, y, z); + if (!world.isMultiplayerAndNotHost) + this.displayGui(entityplayer, inventory); + return true; + } + + @Override + protected TileEntity getBlockEntity() { + return new TileEntityTransposer(); + } + + public static void displayGui(EntityPlayer player, IInventory inventory){ + if(player instanceof EntityPlayerMP) { + //Multiplayer + ((IEntityPlayer)player).displayGUITransposer(inventory); + return; + } + //Singleplayer + System.out.println("One"); + ((IEntityPlayer)player).displayGUITransposer(inventory); + } +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/block/BlockTube.java b/src/main/java/net/brokenmoon/afloydtubemod/block/BlockTube.java new file mode 100644 index 0000000..212f8ec --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/block/BlockTube.java @@ -0,0 +1,19 @@ +package net.brokenmoon.afloydtubemod.block; + +import net.minecraft.src.BlockContainer; +import net.minecraft.src.Material; +import net.minecraft.src.TileEntity; +import net.brokenmoon.afloydtubemod.tileEntity.TileEntityTube; + +public class BlockTube extends BlockContainer { + + + public BlockTube(int i, Material material) { + super(i, material); + } + + @Override + protected TileEntity getBlockEntity(){ + return new TileEntityTube(); + } +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/gui/ContainerTransposer.java b/src/main/java/net/brokenmoon/afloydtubemod/gui/ContainerTransposer.java new file mode 100644 index 0000000..5e5de8e --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/gui/ContainerTransposer.java @@ -0,0 +1,59 @@ +package net.brokenmoon.afloydtubemod.gui; + +import net.minecraft.src.*; + + +public class ContainerTransposer extends Container { + + private IInventory inventory; + private int numberOfRowsUpper; + + public ContainerTransposer(IInventory lowerInventory, IInventory upperInventory) { + this.inventory = upperInventory; + this.numberOfRowsUpper = upperInventory.getSizeInventory() / 3; + //Upper + for (int j = 0; j < this.numberOfRowsUpper; ++j) { + for (int i1 = 0; i1 < 12; ++i1) { + this.addSlot(new Slot(upperInventory, i1 + j * 12, 8 + i1 * 18, 8 + j * 18)); + } + } + //Lower + for (int k = 0; k < 3; ++k) { + for (int j1 = 0; j1 < 9; ++j1) { + this.addSlot(new Slot(lowerInventory, j1 + k * 9 + 9, 8 + 18 + 9 + j1 * 18, 174 + k * 18)); + } + } + //Taskbar + for (int l = 0; l < 9; ++l) { + this.addSlot(new Slot(lowerInventory, l, 8 + 18 + 9 + l * 18, 232)); + } + } + + @Override + public void quickMoveItems(int slotID, EntityPlayer player, boolean shift, boolean control) { + Slot slot = (Slot)this.inventorySlots.get(slotID); + if (slot == null || !slot.hasStack()) { + return; + } + ItemStack item = slot.getStack(); + ItemStack originalItem = item.copy(); + if (slotID < this.numberOfRowsUpper * 12) { + this.onStackMergeShiftClick(item, this.numberOfRowsUpper * 3, this.inventorySlots.size(), true); + } else { + this.onStackMergeShiftClick(item, 0, this.numberOfRowsUpper * 3, false); + } + if (item.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + if (item.stackSize != originalItem.stackSize) { + slot.onPickupFromSlot(item); + } + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) { + return this.inventory.canInteractWith(entityPlayer); + } +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/gui/GuiTransposer.java b/src/main/java/net/brokenmoon/afloydtubemod/gui/GuiTransposer.java new file mode 100644 index 0000000..9e1767d --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/gui/GuiTransposer.java @@ -0,0 +1,31 @@ +package net.brokenmoon.afloydtubemod.gui; + +import net.minecraft.src.GuiContainer; +import net.minecraft.src.IInventory; +import org.lwjgl.opengl.GL11; + +public class GuiTransposer extends GuiContainer { + private IInventory upperChestInventory; + private IInventory lowerChestInventory; + private int inventoryRows; + public GuiTransposer(IInventory iinventory, IInventory iinventory1) { + super(new ContainerTransposer(iinventory, iinventory1)); + this.upperChestInventory = iinventory; + this.lowerChestInventory = iinventory1; + this.field_948_f = false; + this.inventoryRows = iinventory1.getSizeInventory() / 3; + this.ySize = 176; + this.xSize = 166; + System.out.println("Three"); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float f) { + int i = this.mc.renderEngine.getTexture("/assets/tubemod/gui/containerTransposer.png"); + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + this.mc.renderEngine.bindTexture(i); + int x = (this.width - this.xSize) / 2; + int y = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize); + } +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinEntityPlayerMP.java b/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinEntityPlayerMP.java new file mode 100644 index 0000000..f41f725 --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinEntityPlayerMP.java @@ -0,0 +1,30 @@ +package net.brokenmoon.afloydtubemod.mixin; + +import net.brokenmoon.afloydtubemod.gui.ContainerTransposer; +import net.brokenmoon.afloydtubemod.mixinInterface.IEntityPlayer; +import net.minecraft.src.EntityPlayerMP; +import net.minecraft.src.IInventory; +import net.minecraft.src.NetServerHandler; +import net.minecraft.src.Packet100OpenWindow; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(value = EntityPlayerMP.class, remap = false) +public class MixinEntityPlayerMP implements IEntityPlayer { + @Shadow + private void getNextWindowId() {} + @Shadow + private int currentWindowId; + @Shadow + public NetServerHandler playerNetServerHandler; + + @Override + public void displayGUITransposer(IInventory iInventory) { + this.getNextWindowId(); + NetServerHandler.logger.info(((EntityPlayerMP)(Object)this).username + " interacted with chest at (" + ((EntityPlayerMP)(Object)this).posX + ", " + ((EntityPlayerMP)(Object)this).posY + ", " + ((EntityPlayerMP)(Object)this).posZ + ")"); + this.playerNetServerHandler.sendPacket(new Packet100OpenWindow(this.currentWindowId, 8, iInventory.getInvName(), iInventory.getSizeInventory())); + ((EntityPlayerMP)(Object)this).craftingInventory = new ContainerTransposer(((EntityPlayerMP)(Object)this).inventory, iInventory); + ((EntityPlayerMP)(Object)this).craftingInventory.windowId = this.currentWindowId; + ((EntityPlayerMP)(Object)this).craftingInventory.onContainerInit(((EntityPlayerMP)(Object)this)); + } +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinEntityPlayerSP.java b/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinEntityPlayerSP.java new file mode 100644 index 0000000..3c467c1 --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinEntityPlayerSP.java @@ -0,0 +1,20 @@ +package net.brokenmoon.afloydtubemod.mixin; + +import net.brokenmoon.afloydtubemod.gui.GuiTransposer; +import net.brokenmoon.afloydtubemod.mixinInterface.IEntityPlayer; +import net.minecraft.client.Minecraft; +import net.minecraft.src.EntityPlayerSP; +import net.minecraft.src.IInventory; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(value = EntityPlayerSP.class, remap = false) +public class MixinEntityPlayerSP implements IEntityPlayer { + @Shadow + protected Minecraft mc; + @Override + public void displayGUITransposer(IInventory iInventory) { + System.out.println("Two"); + this.mc.displayGuiScreen(new GuiTransposer(((EntityPlayerSP)(Object)this).inventory, iInventory)); + } +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinNetClientHandler.java b/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinNetClientHandler.java new file mode 100644 index 0000000..3b86e0b --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinNetClientHandler.java @@ -0,0 +1,27 @@ +package net.brokenmoon.afloydtubemod.mixin; + +import net.brokenmoon.afloydtubemod.mixinInterface.IEntityPlayer; +import net.brokenmoon.afloydtubemod.tileEntity.TileEntityTransposer; +import net.minecraft.client.Minecraft; +import net.minecraft.src.NetClientHandler; +import net.minecraft.src.Packet100OpenWindow; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(value = NetClientHandler.class, remap = false) +public class MixinNetClientHandler { + @Shadow + private Minecraft mc; + + @Inject(method = "handleOpenWindow", at = @At("TAIL")) + public void injectMethod(Packet100OpenWindow packet100openwindow, CallbackInfo info) { + if (packet100openwindow.inventoryType == 8) { + TileEntityTransposer trans = new TileEntityTransposer(); + ((IEntityPlayer)this.mc.thePlayer).displayGUITransposer(trans); + this.mc.thePlayer.craftingInventory.windowId = packet100openwindow.windowId; + } + } +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinTileEntity.java b/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinTileEntity.java new file mode 100644 index 0000000..30a6370 --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/mixin/MixinTileEntity.java @@ -0,0 +1,18 @@ +package net.brokenmoon.afloydtubemod.mixin; + +import net.brokenmoon.afloydtubemod.tileEntity.TileEntityTransposer; +import net.brokenmoon.afloydtubemod.tileEntity.TileEntityTube; +import net.minecraft.src.TileEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(value = TileEntity.class, remap = false) +public class MixinTileEntity { + @Shadow + private static void addMapping(Class class1, String s) {} + + static { + addMapping(TileEntityTransposer.class, "Iron Chest"); + addMapping(TileEntityTube.class, "Gold Chest"); + } +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/mixinInterface/IEntityPlayer.java b/src/main/java/net/brokenmoon/afloydtubemod/mixinInterface/IEntityPlayer.java new file mode 100644 index 0000000..10af180 --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/mixinInterface/IEntityPlayer.java @@ -0,0 +1,7 @@ +package net.brokenmoon.afloydtubemod.mixinInterface; + +import net.minecraft.src.IInventory; + +public interface IEntityPlayer { + public void displayGUITransposer(IInventory iInventory); +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/tileEntity/TileEntityTransposer.java b/src/main/java/net/brokenmoon/afloydtubemod/tileEntity/TileEntityTransposer.java new file mode 100644 index 0000000..c531f87 --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/tileEntity/TileEntityTransposer.java @@ -0,0 +1,43 @@ +package net.brokenmoon.afloydtubemod.tileEntity; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; + +public class TileEntityTransposer extends TileEntity implements IInventory { + @Override + public int getSizeInventory() { + return 0; + } + + @Override + public ItemStack getStackInSlot(int i) { + return null; + } + + @Override + public ItemStack decrStackSize(int i, int j) { + return null; + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemStack) { + + } + + @Override + public String getInvName() { + return null; + } + + @Override + public int getInventoryStackLimit() { + return 0; + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) { + return false; + } +} diff --git a/src/main/java/net/brokenmoon/afloydtubemod/tileEntity/TileEntityTube.java b/src/main/java/net/brokenmoon/afloydtubemod/tileEntity/TileEntityTube.java new file mode 100644 index 0000000..cc62546 --- /dev/null +++ b/src/main/java/net/brokenmoon/afloydtubemod/tileEntity/TileEntityTube.java @@ -0,0 +1,6 @@ +package net.brokenmoon.afloydtubemod.tileEntity; + +import net.minecraft.src.TileEntity; + +public class TileEntityTube extends TileEntity { +} diff --git a/src/main/java/turniplabs/examplemod/ExampleMod.java b/src/main/java/turniplabs/examplemod/ExampleMod.java deleted file mode 100644 index eb07098..0000000 --- a/src/main/java/turniplabs/examplemod/ExampleMod.java +++ /dev/null @@ -1,16 +0,0 @@ -package turniplabs.examplemod; - -import net.fabricmc.api.ModInitializer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -public class ExampleMod implements ModInitializer { - public static final String MOD_ID = "examplemod"; - public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); - - @Override - public void onInitialize() { - LOGGER.info("ExampleMod initialized."); - } -} diff --git a/src/main/resources/examplemod.mixins.json b/src/main/resources/afloydtubemod.mixins.json similarity index 51% rename from src/main/resources/examplemod.mixins.json rename to src/main/resources/afloydtubemod.mixins.json index e98223c..c3a49d2 100644 --- a/src/main/resources/examplemod.mixins.json +++ b/src/main/resources/afloydtubemod.mixins.json @@ -1,9 +1,13 @@ { "required": true, "minVersion": "0.8", - "package": "turniplabs.examplemod.mixin", + "package": "net.brokenmoon.afloydtubemod.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ + "MixinEntityPlayerSP", + "MixinEntityPlayerMP", + "MixinNetClientHandler", + "MixinTileEntity" ], "client": [ ], diff --git a/src/main/resources/assets/tubemod/block/testTexture.png b/src/main/resources/assets/tubemod/block/testTexture.png new file mode 100644 index 0000000..249d12f Binary files /dev/null and b/src/main/resources/assets/tubemod/block/testTexture.png differ diff --git a/src/main/resources/assets/tubemod/gui/containerTransposer.png b/src/main/resources/assets/tubemod/gui/containerTransposer.png new file mode 100644 index 0000000..41fea0f Binary files /dev/null and b/src/main/resources/assets/tubemod/gui/containerTransposer.png differ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index c93d2bc..62bc4e9 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,15 +1,15 @@ { "schemaVersion": 1, - "id": "examplemod", + "id": "afloydtubemod", "version": "${version}", - "name": "Example Mod", - "description": "This mod aims to help new BTA modders.", + "name": "Astoria's Tube Mod", + "description": "Basic mod with tube system", "authors": [ - "Turnip Labs" + "Astoria Floyd" ], "contact": { - "homepage": "", + "homepage": "http://broken-moon.net", "sources": "" }, @@ -18,16 +18,22 @@ "environment": "*", "entrypoints": { "main": [ - "turniplabs.examplemod.ExampleMod" + "net.brokenmoon.afloydtubemod.Afloydtubemod" ] }, "mixins": [ - "examplemod.mixins.json" + "afloydtubemod.mixins.json" ], "depends": { "fabricloader": ">=0.13.3" }, "suggests": { + }, + "custom": { + "loom:injected_interfaces": { + "net/minecraft/src/EntityPlayerSP": ["net/brokenmoon/afloydtubemod/mixinInterface/IEntityPlayer"], + "net/minecraft/src/EntityPlayerMP": ["net/brokenmoon/afloydtubemod/mixinInterface/IEntityPlayer"] + } } } diff --git a/src/main/resources/lang/afloydtubemod/en_US.lang b/src/main/resources/lang/afloydtubemod/en_US.lang new file mode 100644 index 0000000..c58710c --- /dev/null +++ b/src/main/resources/lang/afloydtubemod/en_US.lang @@ -0,0 +1,2 @@ +item.afloydtubemod.item.name=Test Item +item.afloydtubemod.item.desc=Test Desc. \ No newline at end of file diff --git a/src/main/resources/lang/examplemod/en_US.lang b/src/main/resources/lang/examplemod/en_US.lang deleted file mode 100644 index e69de29..0000000