From 23b2be9cc44b103ded010c49f0b2694ac74178c5 Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Wed, 31 May 2023 16:53:22 +0200 Subject: [PATCH] feat: implement eldritch stone --- gradlew.bat | 90 --- .../net/anvilcraft/thaummach/TMBlocks.java | 19 +- .../thaummach/blocks/BlockApparatusMetal.java | 4 +- .../thaummach/blocks/BlockApparatusStone.java | 599 ++++++++++++++++++ .../thaummach/blocks/BlockApparatusWood.java | 1 - .../items/ItemBlockApparatusStone.java | 30 + .../SimpleBlockApparatusRenderer.java | 32 + .../metal/VoidChestApparatusRenderer.java | 43 -- .../assets/thaummach/lang/en_US.lang | 8 + .../textures/blocks/eldritch_stone.png | Bin 0 -> 561 bytes 10 files changed, 681 insertions(+), 145 deletions(-) delete mode 100644 gradlew.bat create mode 100644 src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusStone.java create mode 100644 src/main/java/net/anvilcraft/thaummach/items/ItemBlockApparatusStone.java create mode 100644 src/main/java/net/anvilcraft/thaummach/render/apparatus/SimpleBlockApparatusRenderer.java delete mode 100644 src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/metal/VoidChestApparatusRenderer.java create mode 100644 src/main/resources/assets/thaummach/textures/blocks/eldritch_stone.png diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index 8a0b282..0000000 --- a/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/src/main/java/net/anvilcraft/thaummach/TMBlocks.java b/src/main/java/net/anvilcraft/thaummach/TMBlocks.java index 8774afd..9858db0 100644 --- a/src/main/java/net/anvilcraft/thaummach/TMBlocks.java +++ b/src/main/java/net/anvilcraft/thaummach/TMBlocks.java @@ -3,10 +3,12 @@ package net.anvilcraft.thaummach; import cpw.mods.fml.common.registry.GameRegistry; import net.anvilcraft.thaummach.blocks.BlockApparatusFragile; import net.anvilcraft.thaummach.blocks.BlockApparatusMetal; +import net.anvilcraft.thaummach.blocks.BlockApparatusStone; import net.anvilcraft.thaummach.blocks.BlockApparatusWood; import net.anvilcraft.thaummach.blocks.BlockSeal; import net.anvilcraft.thaummach.items.ItemBlockApparatusFragile; import net.anvilcraft.thaummach.items.ItemBlockApparatusMetal; +import net.anvilcraft.thaummach.items.ItemBlockApparatusStone; import net.anvilcraft.thaummach.items.ItemBlockApparatusWood; import net.anvilcraft.thaummach.items.ItemSeal; import net.minecraft.block.Block; @@ -14,24 +16,23 @@ import net.minecraft.block.Block; public class TMBlocks { public static Block apparatusFragile; public static Block apparatusMetal; + public static Block apparatusStone; public static Block apparatusWood; public static Block seal; public static void init() { + // clang-format off apparatusFragile = new BlockApparatusFragile(); apparatusMetal = new BlockApparatusMetal(); + apparatusStone = new BlockApparatusStone(); apparatusWood = new BlockApparatusWood(); seal = new BlockSeal(); - GameRegistry.registerBlock( - apparatusFragile, ItemBlockApparatusFragile.class, "apparatus_fragile" - ); - GameRegistry.registerBlock( - apparatusMetal, ItemBlockApparatusMetal.class, "apparatus_metal" - ); - GameRegistry.registerBlock( - apparatusWood, ItemBlockApparatusWood.class, "apparatus_wood" - ); + GameRegistry.registerBlock(apparatusFragile, ItemBlockApparatusFragile.class, "apparatus_fragile"); + GameRegistry.registerBlock(apparatusMetal, ItemBlockApparatusMetal.class, "apparatus_metal"); + GameRegistry.registerBlock(apparatusStone, ItemBlockApparatusStone.class, "apparatus_stone"); + GameRegistry.registerBlock(apparatusWood, ItemBlockApparatusWood.class, "apparatus_wood"); GameRegistry.registerBlock(seal, ItemSeal.class, "seal"); + // clang-format on } } diff --git a/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusMetal.java b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusMetal.java index c7b7bf6..483dac5 100644 --- a/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusMetal.java +++ b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusMetal.java @@ -8,6 +8,7 @@ import dev.tilera.auracore.client.FXSparkle; import net.anvilcraft.alec.jalec.factories.AlecUnexpectedRuntimeErrorExceptionFactory; import net.anvilcraft.thaummach.render.BlockApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.IApparatusRenderer; +import net.anvilcraft.thaummach.render.apparatus.SimpleBlockApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.apparati.metal.ArcaneFurnaceApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.apparati.metal.BoreApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.apparati.metal.CrucibleApparatusRenderer; @@ -15,7 +16,6 @@ import net.anvilcraft.thaummach.render.apparatus.apparati.metal.CrystallizerAppa import net.anvilcraft.thaummach.render.apparatus.apparati.metal.GeneratorApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.apparati.metal.SoulBrazierApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.apparati.metal.TankApparatusRenderer; -import net.anvilcraft.thaummach.render.apparatus.apparati.metal.VoidChestApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.apparati.metal.VoidInterfaceApparatusRenderer; import net.anvilcraft.thaummach.tiles.TileArcaneFurnace; import net.anvilcraft.thaummach.tiles.TileBore; @@ -176,7 +176,7 @@ public class BlockApparatusMetal extends BlockApparatus { return GeneratorApparatusRenderer.INSTANCE; case VOID_CHEST: - return VoidChestApparatusRenderer.INSTANCE; + return SimpleBlockApparatusRenderer.INSTANCE; case VOID_INTERFACE: return VoidInterfaceApparatusRenderer.INSTANCE; diff --git a/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusStone.java b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusStone.java new file mode 100644 index 0000000..4a824c9 --- /dev/null +++ b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusStone.java @@ -0,0 +1,599 @@ +package net.anvilcraft.thaummach.blocks; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import java.util.function.Function; + +import net.anvilcraft.alec.jalec.factories.AlecUnexpectedRuntimeErrorExceptionFactory; +import net.anvilcraft.thaummach.render.BlockApparatusRenderer; +import net.anvilcraft.thaummach.render.apparatus.IApparatusRenderer; +import net.anvilcraft.thaummach.render.apparatus.SimpleBlockApparatusRenderer; +import net.anvilcraft.thaummach.tiles.TileSeal; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockApparatusStone extends BlockApparatus { + public IIcon iconEldritchStone; + + public BlockApparatusStone() { + super(Material.rock); + this.setHardness(2.0F); + this.setResistance(15.0F); + this.setStepSound(Block.soundTypeStone); + } + + @Override + public void registerBlockIcons(IIconRegister register) { + Function reg = (s) -> register.registerIcon("thaummach:" + s); + + this.iconEldritchStone = reg.apply("eldritch_stone"); + } + + @Override + public IApparatusRenderer getApparatusRenderer(int meta_) { + MetaVals meta = MetaVals.get(meta_); + switch (meta) { + case ELDRITCH_STONE: + return SimpleBlockApparatusRenderer.INSTANCE; + + default: + return null; + } + } + + @Override + public boolean onBlockActivated( + World world, + int i, + int j, + int k, + EntityPlayer entityplayer, + + // useless parameters + int alec1, + float alec2, + float alec3, + float alec4 + ) { + TileEntity te = world.getTileEntity(i, j, k); + int meta = world.getBlockMetadata(i, j, k); + //if (meta == 8 && entityplayer.inventory.getCurrentItem() != null) { + // boolean filled = false; + // if (entityplayer.inventory.getCurrentItem().isItemEqual(new ItemStack(Items.bucket) + // )) { + // entityplayer.inventory.setInventorySlotContents( + // entityplayer.inventory.currentItem, new ItemStack(Items.water_bucket) + // ); + // filled = true; + // } else if (entityplayer.inventory.getCurrentItem().isItemEqual( + // new ItemStack(Items.glass_bottle) + // )) { + // if (entityplayer.inventory.decrStackSize(entityplayer.inventory.currentItem, 1) + // == null) { + // entityplayer.inventory.setInventorySlotContents( + // entityplayer.inventory.currentItem, new ItemStack(Items.potionitem) + // ); + // } else if (!entityplayer.inventory.addItemStackToInventory(new + // ItemStack(Item.potionitem + // ))) { + // entityplayer.dropPlayerItem(new ItemStack(Item.potion.shiftedIndex, 1, 0)); + // } + + // filled = true; + // } else { + // ItemStack filler = this.getOtherWaterContainer(entityplayer.inventory); + // if (filler != null) { + // entityplayer.inventory.decrStackSize(entityplayer.inventory.currentItem, 1); + // if (!entityplayer.inventory.addItemStackToInventory( + // new ItemStack(filler.getItem(), 1, filler.getItemDamage()) + // )) { + // entityplayer.dropPlayerItem( + // new ItemStack(filler.getItem(), 1, filler.getItemDamage()) + // ); + // } + + // filled = true; + // } + // } + + // if (filled) { + // int auraX = i >> 4; + // int auraZ = k >> 4; + // SIAuraChunk ac = (SIAuraChunk) mod_ThaumCraft.AuraHM.get( + // Arrays.asList(auraX, auraZ, ThaumCraftCore.getDimension(world)) + // ); + // if (ac != null) { + // ++ac.badVibes; + // } + + // return true; + // } + + //} + + return super.onBlockActivated(world, i, j, k, entityplayer, alec1, alec2, alec3, alec4); + } + + // TODO: WTF + //private ItemStack getOtherWaterContainer(InventoryPlayer inventory) { + // if (ItemInterface.getItem("waxCapsule") != null + // && inventory.getCurrentItem().isItemEqual(ItemInterface.getItem("waxCapsule"))) { + // return ItemInterface.getItem("waxCapsuleWater"); + // } else if (ItemInterface.getItem("refractoryEmpty") != null && + // inventory.getCurrentItem().isItemEqual(ItemInterface.getItem("refractoryEmpty"))) { + // return ItemInterface.getItem("refractoryWater"); + // } else if (ItemInterface.getItem("canEmpty") != null && + // inventory.getCurrentItem().isItemEqual(ItemInterface.getItem("canEmpty"))) { + // return ItemInterface.getItem("canWater"); + // } else { + // return Items.getItem("cell") != null + // && inventory.getCurrentItem().isItemEqual(Items.getItem("cell")) + // ? ItemInterface.getItem("waterCell") + // : null; + // } + //} + + @Override + public float getBlockHardness(World world, int x, int y, int z) { + MetaVals meta = MetaVals.get(world.getBlockMetadata(x, y, z)); + return meta == MetaVals.ELDRITCH_STONE ? 10.0f : super.getBlockHardness(world, x, y, z); + } + + @Override + public TileEntity createNewTileEntity(World world, int md) { + MetaVals meta = MetaVals.get(md); + + switch (meta) { + case ELDRITCH_STONE: + return null; + + default: + throw AlecUnexpectedRuntimeErrorExceptionFactory.PLAIN.createAlecException( + "Invalid meta!" + ); + } + + //if (md == 1) { + // return new TileInfuser(); + //} else if (md == 2) { + // return new TileInfuserDark(); + //} else if (md == 3) { + // return new TileEnchanter(); + //} else if (md == 4) { + // return new TileResearcher(); + //} else if (md == 6) { + // return new TileDarknessGenenerator(); + //} else if (md == 7) { + // return new TileEnchanterAdvanced(); + //} else { + // return (TileEntity) (md == 8 ? new TileUrn() : super.getBlockEntity(md)); + //} + } + + @Override + public int getRenderType() { + return BlockApparatusRenderer.RI; + } + + // TODO: WTF + //public int getBlockTextureFromSide(int i) { + // return 31; + //} + + @Override + public IIcon getIcon(int i, int j) { + MetaVals meta = MetaVals.get(j); + + switch (meta) { + case ELDRITCH_STONE: + return this.iconEldritchStone; + + default: + return null; + } + + //if (j == 0) { + // return 46; + //} else if (j == 4) { + // return 93; + //} else if (j == 6) { + // return i < 2 ? 105 : 108; + //} else if (j == 8) { + // if (i == 0) { + // return 159; + // } else { + // return i == 1 ? 158 : 157; + // } + //} else { + // return super.getBlockTextureFromSideAndMetadata(i, j); + //} + } + + @Override + public IIcon getIcon(IBlockAccess iblockaccess, int i, int j, int k, int side) { + int meta = iblockaccess.getBlockMetadata(i, j, k); + //if (meta == 3) { + // if (side == 0) { + // return 162; + // } else { + // return side == 1 ? 161 : 160; + // } + //} else if (meta == 7) { + // if (side == 0) { + // return 162; + // } else { + // return side == 1 ? 164 : 163; + // } + //} else { + // TileInfuser ti; + // HelperLocation loc; + // TileEntity te; + // if (meta == 1) { + // if (side == 0) { + // return 53; + // } else if (side == 1) { + // return 54; + // } else { + // ti = (TileInfuser) iblockaccess.getBlockTileEntity(i, j, k); + // loc = new HelperLocation(ti); + // switch (side) { + // case 2: + // loc.facing = HelperFacing.NEGZ; + // break; + // case 3: + // loc.facing = HelperFacing.POSZ; + // break; + // case 4: + // loc.facing = HelperFacing.NEGX; + // break; + // case 5: + // loc.facing = HelperFacing.POSX; + // } + + // if (!ti.getConnectable(loc.facing)) { + // return 55; + // } else { + // te = loc.getConnectableTile(iblockaccess); + // return te != null ? 56 : 55; + // } + // } + // } else if (meta == 2) { + // if (side == 0) { + // return 59; + // } else if (side == 1) { + // return 60; + // } else { + // ti = (TileInfuser) iblockaccess.getBlockTileEntity(i, j, k); + // loc = new HelperLocation(ti); + // switch (side) { + // case 2: + // loc.facing = HelperFacing.NEGZ; + // break; + // case 3: + // loc.facing = HelperFacing.POSZ; + // break; + // case 4: + // loc.facing = HelperFacing.NEGX; + // break; + // case 5: + // loc.facing = HelperFacing.POSX; + // } + + // if (!ti.getConnectable(loc.facing)) { + // return 61; + // } else { + // te = loc.getConnectableTile(iblockaccess); + // return te != null ? 62 : 61; + // } + // } + // } else if (meta == 4) { + // if (side == 0) { + // return 93; + // } else { + // return side == 1 ? 91 : 92; + // } + // } else { + // return super.getBlockTexture(iblockaccess, i, j, k, side); + // } + //} + return this.getIcon(side, meta); + } + + @Override + @SuppressWarnings({ "rawtypes", "unchecked" }) + public void getSubBlocks(Item arg0, CreativeTabs arg1, List list) { + Arrays.stream(MetaVals.values()) + .map((m) -> new ItemStack(this, 1, m.ordinal())) + .forEach(list::add); + } + + @Override + public void addCollisionBoxesToList( + World world, int x, int y, int z, AxisAlignedBB axisalignedbb, List list, Entity entity + ) { + int meta = world.getBlockMetadata(x, y, z); + if (meta == 0) { + TileEntity te = world.getTileEntity(x, y, z); + int l = 1; + if (te != null && te instanceof TileSeal) { + l = ((TileSeal) te).orientation; + } + + float thickness = 0.0625F; + if (l == 0) { + this.setBlockBounds(0.3F, 1.0F - thickness, 0.3F, 0.7F, 1.0F, 0.7F); + } + + if (l == 1) { + this.setBlockBounds(0.3F, 0.0F, 0.3F, 0.7F, thickness, 0.7F); + } + + if (l == 2) { + this.setBlockBounds(0.3F, 0.3F, 1.0F - thickness, 0.7F, 0.7F, 1.0F); + } + + if (l == 3) { + this.setBlockBounds(0.3F, 0.3F, 0.0F, 0.7F, 0.7F, thickness); + } + + if (l == 4) { + this.setBlockBounds(1.0F - thickness, 0.3F, 0.3F, 1.0F, 0.7F, 0.7F); + } + + if (l == 5) { + this.setBlockBounds(0.0F, 0.3F, 0.3F, thickness, 0.7F, 0.7F); + } + + super.addCollisionBoxesToList(world, x, y, z, axisalignedbb, list, entity); + } else if (meta == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F); + super.addCollisionBoxesToList(world, x, y, z, axisalignedbb, list, entity); + } else if (meta == 4) { + this.setBlockBounds(0.0F, 0.375F, 0.0F, 1.0F, 0.625F, 1.0F); + super.addCollisionBoxesToList(world, x, y, z, axisalignedbb, list, entity); + this.setBlockBounds(0.2F, 0.0F, 0.2F, 0.8F, 0.375F, 0.8F); + super.addCollisionBoxesToList(world, x, y, z, axisalignedbb, list, entity); + } else if (meta != 1 && meta != 2) { + if (meta == 8) { + this.setBlockBounds(0.3125F, 0.5625F, 0.3125F, 0.6875F, 1.0F, 0.6875F); + super.addCollisionBoxesToList(world, x, y, z, axisalignedbb, list, entity); + this.setBlockBounds(0.125F, 0.0F, 0.125F, 0.875F, 0.5625F, 0.875F); + super.addCollisionBoxesToList(world, x, y, z, axisalignedbb, list, entity); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(world, x, y, z, axisalignedbb, list, entity); + this.setBlockBoundsForItemRender(); + } + } else { + float w1 = 0.0625F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F - w1, 1.0F); + super.addCollisionBoxesToList(world, x, y, z, axisalignedbb, list, entity); + } + } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, int i, int j, int k) { + int md = iblockaccess.getBlockMetadata(i, j, k); + if (md == 0) { + if (iblockaccess.getTileEntity(i, j, k) == null) { + return; + } + + int l = ((TileSeal) ((TileSeal) iblockaccess.getTileEntity(i, j, k))).orientation; + float thickness = 0.0625F; + if (l == 0) { + this.setBlockBounds(0.3F, 1.0F - thickness, 0.3F, 0.7F, 1.0F, 0.7F); + } + + if (l == 1) { + this.setBlockBounds(0.3F, 0.0F, 0.3F, 0.7F, thickness, 0.7F); + } + + if (l == 2) { + this.setBlockBounds(0.3F, 0.3F, 1.0F - thickness, 0.7F, 0.7F, 1.0F); + } + + if (l == 3) { + this.setBlockBounds(0.3F, 0.3F, 0.0F, 0.7F, 0.7F, thickness); + } + + if (l == 4) { + this.setBlockBounds(1.0F - thickness, 0.3F, 0.3F, 1.0F, 0.7F, 0.7F); + } + + if (l == 5) { + this.setBlockBounds(0.0F, 0.3F, 0.3F, thickness, 0.7F, 0.7F); + } + } else if (md == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F); + } else { + float w1; + if (md != 1 && md != 2) { + if (md == 6) { + w1 = 0.0625F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F - w1, 1.0F); + } else if (md == 4) { + this.setBlockBounds(0.0F, 0.375F, 0.0F, 1.0F, 0.625F, 1.0F); + } else if (md == 8) { + this.setBlockBounds(0.125F, 0.0F, 0.125F, 0.875F, 0.5625F, 0.875F); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + } else { + w1 = 0.0625F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F - w1, 1.0F); + } + } + } + + @Override + public AxisAlignedBB getSelectedBoundingBoxFromPool(World w, int i, int j, int k) { + int md = w.getBlockMetadata(i, j, k); + if (md == 3) { + AxisAlignedBB.getBoundingBox(0.0, 0.0, 0.0, 1.0, 0.75, 1.0); + } else { + float w1; + if (md != 1 && md != 2) { + if (md == 4) { + AxisAlignedBB.getBoundingBox(0.0, 0.375, 0.0, 1.0, 0.625, 1.0); + } else if (md == 6) { + w1 = 0.0625F; + AxisAlignedBB.getBoundingBox(0.0, 0.0, 0.0, 1.0, (double) (0.5F - w1), 1.0); + } else if (md == 8) { + AxisAlignedBB.getBoundingBox(0.3125, 0.5625, 0.3125, 0.6875, 1.0, 0.6875); + AxisAlignedBB.getBoundingBox(0.125, 0.0, 0.125, 0.875, 0.5625, 0.875); + } else { + AxisAlignedBB.getBoundingBox(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + } + } else { + w1 = 0.0625F; + AxisAlignedBB.getBoundingBox(0.0, 0.0, 0.0, 1.0, (double) (1.0F - w1), 1.0); + } + } + + return super.getSelectedBoundingBoxFromPool(w, i, j, k); + } + + @Override + public void setBlockBoundsForItemRender() { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + @Override + public void randomDisplayTick(World w, int i, int j, int k, Random r) { + //int meta = w.getBlockMetadata(i, j, k); + //if ((meta == 3 || meta == 4 || meta == 7) && r.nextBoolean()) { + // for (int ll = i - 2; ll <= i + 2; ++ll) { + // for (int i1 = k - 2; i1 <= k + 2; ++i1) { + // if (ll > i - 2 && ll < i + 2 && i1 == k - 1) { + // i1 = k + 2; + // } + + // for (int j1 = j; j1 <= j + 1; ++j1) { + // if ((w.getBlockId(ll, j1, i1) == Block.bookShelf.blockID + // || w.getBlockId(ll, j1, i1) == mod_ThaumCraft.blockAppFragile.blockID + // && w.getBlockMetadata(ll, j1, i1) == 4) + // && (w.getBlockId(ll, j1, i1) != Block.bookShelf.blockID + // || r.nextInt(16) == 0) + // && (w.getBlockId(ll, j1, i1) != mod_ThaumCraft.blockAppFragile.blockID + // || r.nextInt(8) == 0)) { + // if (!w.isAirBlock((ll - i) / 2 + i, j1, (i1 - k) / 2 + k)) { + // break; + // } + + // w.spawnParticle( + // "enchantmenttable", + // (double) i + 0.5, + // (double) j + 2.0, + // (double) k + 0.5, + // (double) ((float) (ll - i) + r.nextFloat()) - 0.5, + // (double) ((float) (j1 - j) - r.nextFloat() - 1.0F), + // (double) ((float) (i1 - k) + r.nextFloat()) - 0.5 + // ); + // } + // } + // } + // } + //} + } + + @Override + public boolean isBlockSolid(IBlockAccess world, int x, int y, int z, int side) { + MetaVals md = MetaVals.get(world.getBlockMetadata(x, y, z)); + switch (md) { + case ENCHANTER: + case URN: + return false; + + default: + return true; + } + } + + //public boolean canPlaceBlockOnSide(World world, int i, int j, int k, int l) { + // if (l == 0 && world.isBlockSolidOnSide(i, j + 1, k, 0)) { + // return true; + // } else if (l == 1 && world.isBlockSolidOnSide(i, j - 1, k, 1)) { + // return true; + // } else if (l == 2 && world.isBlockSolidOnSide(i, j, k + 1, 2)) { + // return true; + // } else if (l == 3 && world.isBlockSolidOnSide(i, j, k - 1, 3)) { + // return true; + // } else if (l == 4 && world.isBlockSolidOnSide(i + 1, j, k, 4)) { + // return true; + // } else { + // return l == 5 && world.isBlockSolidOnSide(i - 1, j, k, 5); + // } + //} + + //public boolean canPlaceBlockAt(World world, int i, int j, int k) { + // if (world.isBlockSolidOnSide(i - 1, j, k, 5)) { + // return true; + // } else if (world.isBlockSolidOnSide(i + 1, j, k, 4)) { + // return true; + // } else if (world.isBlockSolidOnSide(i, j, k - 1, 3)) { + // return true; + // } else if (world.isBlockSolidOnSide(i, j, k + 1, 2)) { + // return true; + // } else { + // return world.isBlockSolidOnSide(i, j - 1, k, 1) + // ? true + // : world.isBlockSolidOnSide(i, j + 1, k, 0); + // } + //} + + private boolean checkIfAttachedToBlock(World world, int i, int j, int k) { + if (!this.canPlaceBlockAt(world, i, j, k)) { + this.dropBlockAsItem(world, i, j, k, world.getBlockMetadata(i, j, k), 0); + world.setBlockToAir(i, j, k); + return false; + } else { + return true; + } + } + + @Override + public int getLightValue(IBlockAccess iba, int i, int j, int k) { + MetaVals md = MetaVals.get(iba.getBlockMetadata(i, j, k)); + return md == MetaVals.ELDRITCH_STONE ? 12 : super.getLightValue(iba, i, j, k); + } + + @Override + public float getExplosionResistance( + Entity exploder, World world, int x, int y, int z, double srcX, double srcY, double srcZ + ) { + MetaVals md = MetaVals.get(world.getBlockMetadata(x, y, z)); + return md == MetaVals.ELDRITCH_STONE ? 100.0F : 15.0F; + } + + public static enum MetaVals { + __SEAL, // 0 + INFUSER, // 1 + INFUSER_DARK, // 2 + ENCHANTER, // 3 + __RESEARCHER, // 4 + ELDRITCH_STONE, // 5 + DARKNESS_GENERATOR, // 6 + ENCHANTER_ADVANCED, // 7 + URN; // 8 + + public static MetaVals get(int meta) { + if (meta < 0 || meta >= MetaVals.values().length) + return null; + + return MetaVals.values()[meta]; + } + } +} diff --git a/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusWood.java b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusWood.java index a6a7f4e..6608b6e 100644 --- a/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusWood.java +++ b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusWood.java @@ -7,7 +7,6 @@ import java.util.stream.IntStream; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.anvilcraft.alec.jalec.factories.AlecUnexpectedRuntimeErrorExceptionFactory; import net.anvilcraft.thaummach.particles.FXWisp; import net.anvilcraft.thaummach.render.BlockApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.IApparatusRenderer; diff --git a/src/main/java/net/anvilcraft/thaummach/items/ItemBlockApparatusStone.java b/src/main/java/net/anvilcraft/thaummach/items/ItemBlockApparatusStone.java new file mode 100644 index 0000000..6cb54dd --- /dev/null +++ b/src/main/java/net/anvilcraft/thaummach/items/ItemBlockApparatusStone.java @@ -0,0 +1,30 @@ +package net.anvilcraft.thaummach.items; + +import net.anvilcraft.thaummach.blocks.BlockApparatusStone.MetaVals; +import net.minecraft.block.Block; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; + +public class ItemBlockApparatusStone extends ItemBlockApparatus { + public ItemBlockApparatusStone(Block block) { + super(block); + } + + @Override + public EnumRarity getRarity(ItemStack itemstack) { + return EnumRarity.uncommon; + } + + @Override + public String getTypeString() { + return "stone"; + } + + @Override + public String getNameExtension(int meta_) { + MetaVals meta = MetaVals.get(meta_); + if (meta == null) + return null; + return meta.toString().toLowerCase(); + } +} diff --git a/src/main/java/net/anvilcraft/thaummach/render/apparatus/SimpleBlockApparatusRenderer.java b/src/main/java/net/anvilcraft/thaummach/render/apparatus/SimpleBlockApparatusRenderer.java new file mode 100644 index 0000000..4deaeac --- /dev/null +++ b/src/main/java/net/anvilcraft/thaummach/render/apparatus/SimpleBlockApparatusRenderer.java @@ -0,0 +1,32 @@ +package net.anvilcraft.thaummach.render.apparatus; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.world.IBlockAccess; +import thaumcraft.client.renderers.block.BlockRenderer; + +public class SimpleBlockApparatusRenderer implements IApparatusRenderer { + public static final SimpleBlockApparatusRenderer INSTANCE = new SimpleBlockApparatusRenderer(); + + @Override + public void renderApparatus( + IBlockAccess w, RenderBlocks rb, int x, int y, int z, Block block, int meta, boolean inv + ) { + if (inv) { + rb.setRenderBoundsFromBlock(block); + BlockRenderer.drawFaces( + rb, + block, + block.getIcon(0, meta), + block.getIcon(1, meta), + block.getIcon(2, meta), + block.getIcon(3, meta), + block.getIcon(4, meta), + block.getIcon(5, meta), + true + ); + } else { + rb.renderStandardBlock(block, x, y, z); + } + } +} diff --git a/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/metal/VoidChestApparatusRenderer.java b/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/metal/VoidChestApparatusRenderer.java deleted file mode 100644 index ec43f90..0000000 --- a/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/metal/VoidChestApparatusRenderer.java +++ /dev/null @@ -1,43 +0,0 @@ -package net.anvilcraft.thaummach.render.apparatus.apparati.metal; - -import net.anvilcraft.thaummach.blocks.BlockApparatusMetal; -import net.anvilcraft.thaummach.render.apparatus.IApparatusRenderer; -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.world.IBlockAccess; -import thaumcraft.client.renderers.block.BlockRenderer; - -public class VoidChestApparatusRenderer implements IApparatusRenderer { - public static final VoidChestApparatusRenderer INSTANCE - = new VoidChestApparatusRenderer(); - - @Override - public void renderApparatus( - IBlockAccess w, - RenderBlocks rb, - int x, - int y, - int z, - Block block_, - int meta, - boolean inv - ) { - BlockApparatusMetal block = (BlockApparatusMetal) block_; - if (inv) { - rb.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - BlockRenderer.drawFaces( - rb, - block, - block.iconVoidChestBottom, - block.iconVoidChestTop, - block.iconVoidChestSide, - block.iconVoidChestSide, - block.iconVoidChestSide, - block.iconVoidChestSide, - true - ); - } else { - rb.renderStandardBlock(block, x, y, z); - } - } -} diff --git a/src/main/resources/assets/thaummach/lang/en_US.lang b/src/main/resources/assets/thaummach/lang/en_US.lang index 1219564..8b93fde 100644 --- a/src/main/resources/assets/thaummach/lang/en_US.lang +++ b/src/main/resources/assets/thaummach/lang/en_US.lang @@ -25,6 +25,14 @@ tile.thaummach:apparatus_metal_void_interface.name=Void Interface tile.thaummach:apparatus_metal_tank.name=Thaumium Reinforced Tank tile.thaummach:apparatus_metal_soul_brazier.name=Soul Brazier +tile.thaummach:apparatus_stone_infuser.name=Thaumic Infuser +tile.thaummach:apparatus_stone_infuser_dark.name=Dark Infuser +tile.thaummach:apparatus_stone_enchanter.name=Thaumic Enchanter +tile.thaummach:apparatus_stone_eldritch_stone.name=Eldritch Stone +tile.thaummach:apparatus_stone_darkness_generator.name=Darkness Generator +tile.thaummach:apparatus_stone_enchanter_advanced.name=Occultic Enchanter +tile.thaummach:apparatus_stone_urn.name=Everfull Urn + tile.thaummach:apparatus_wood_condenser.name=Vis Condenser tile.thaummach:apparatus_wood_duplicator.name=Thaumic Duplicator tile.thaummach:apparatus_wood_repairer.name=Thaumic Restorer diff --git a/src/main/resources/assets/thaummach/textures/blocks/eldritch_stone.png b/src/main/resources/assets/thaummach/textures/blocks/eldritch_stone.png new file mode 100644 index 0000000000000000000000000000000000000000..5574d963f02722d726140ebe19b35d26c76fe2ec GIT binary patch literal 561 zcmV-10?z%3P)mt6 zsXz^xoq~KQ(pyC`xR+Y+6!7jJm-(hoXECM^s5M}Pp*bf2KI{xiYl>OQJT3@;O@vfD zG~&eBi6+l#*jkBYD|W)r{{l{({-7y{{$ES&vi^9g^qkw00000NkvXXu0mjfs@nXy literal 0 HcmV?d00001