From a3fa26799cabd8ce713d1f36cf3aba2c05902467 Mon Sep 17 00:00:00 2001 From: 2zqa <25235249+2zqa@users.noreply.github.com> Date: Sat, 25 Jul 2020 22:01:12 +0200 Subject: [PATCH] Initial commit --- .gitattributes | 2 + .gitignore | 51 +++++ README.md | 26 +++ createmod.bat | 4 + createmod.sh | 5 + .../net/minecraft/src/BlockFence.java | 31 +++ .../net/minecraft/src/BlockStairs.java | 186 ++++++++++++++++++ .../net/minecraft/src/mod_AnnoyanceFix.java | 56 ++++++ 8 files changed, 361 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 README.md create mode 100755 createmod.bat create mode 100755 createmod.sh create mode 100644 src/minecraft/net/minecraft/src/BlockFence.java create mode 100644 src/minecraft/net/minecraft/src/BlockStairs.java create mode 100644 src/minecraft/net/minecraft/src/mod_AnnoyanceFix.java diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d6263c6 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.sh eol=lf +*.bat eol=crlf \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f47975 --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +# Block folders that belong to MCP +jars/ +logs/ +reobf/ +temp/ +bin/ + +conf/ +docs/ +eclipse/ +runtime/ +notes.md + +# AnnoyanceFix related stuff +src/minecraft_server +src/minecraft/net/minecraft/client +src/minecraft/net/minecraft/isom +src/minecraft/net/minecraft/src/*.java +!src/minecraft/net/minecraft/src/BlockFence.java +!src/minecraft/net/minecraft/src/BlockStairs.java +!src/minecraft/net/minecraft/src/mod_AnnoyanceFix.java +!src/minecraft/net/minecraft/src/mod_AnnoyanceFix.java + + +# Allow server.properties +!jars/server.properties + +# Block compiled Python +*.pyc + +# Block downloaded files +runtime/bin/pypy* +!runtime/bin/ + +# Block .idea folder +.idea/ + +# Block python runtime. +runtime/bin/python/ + +# Block command file. +runtime/command + +# Block scripts in the root folder except setup.* and createmod.* +*.bat +*.sh +!createmod.sh +!createmod.bat + +# Block .iml files +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..c79ad6e --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# AnnoyanceFix +_Now using modloader!_ + +## Installation using MultiMC: + +1. Download modloader: https://github.com/coffeenotfound/ModloaderFix-b1.7.3/releases +2. Download this mod: https://github.com/2zqa/AnnoyanceFix/releases +3. Create or edit your beta 1.7.3 instance in MultiMC +4. Click "Add to minecraft.jar" +5. Select modloader and annoyancefix +6. Run and enjoy! 👍 + +## Contributing + +1. Download 1.7.3-LTS (MCP fork): `https://github.com/ModificationStation/1.7.3-LTS/` +2. Fork this repository +3. Clone your own fork: `git clone https://github.com//AnnoyanceFix.git` +4. Run setup from 1.7.3-LTS +5. Add modloader classes to bin/minecraft.jar +6. Run decompile script +7. Run updatemd5 script +8. Copy all files _from_ 1.7.3-LTS _to_ the AnnoyanceFix folder, without overwriting anything +9. Start modding :) +10. Create a pull request when done + +TIP: Use the createmod script to automatically recompile, reobfuscate and create a zip for the mod. diff --git a/createmod.bat b/createmod.bat new file mode 100755 index 0000000..3cfbd1f --- /dev/null +++ b/createmod.bat @@ -0,0 +1,4 @@ +@REM script not tested, sorry! +recompile.bat +reobfuscate.bat +zip -r -j AnnoyanceFix.zip reobf/minecraft diff --git a/createmod.sh b/createmod.sh new file mode 100755 index 0000000..950ac8e --- /dev/null +++ b/createmod.sh @@ -0,0 +1,5 @@ +#!/bin/bash +./recompile.sh +./reobfuscate.sh +rm AnnoyanceFix.zip +zip -r -j AnnoyanceFix.zip reobf/minecraft diff --git a/src/minecraft/net/minecraft/src/BlockFence.java b/src/minecraft/net/minecraft/src/BlockFence.java new file mode 100644 index 0000000..af16d65 --- /dev/null +++ b/src/minecraft/net/minecraft/src/BlockFence.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +public class BlockFence extends Block { + public BlockFence(int var1, int var2) { + super(var1, var2, Material.wood); + } + +// public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { +// if (var1.getBlockId(var2, var3 - 1, var4) == this.blockID) { +// return true; +// } else { +// return !var1.getBlockMaterial(var2, var3 - 1, var4).isSolid() ? false : super.canPlaceBlockAt(var1, var2, var3, var4); +// } +// } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getBoundingBoxFromPool((double)var2, (double)var3, (double)var4, (double)(var2 + 1), (double)((float)var3 + 1.5F), (double)(var4 + 1)); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 11; + } +} diff --git a/src/minecraft/net/minecraft/src/BlockStairs.java b/src/minecraft/net/minecraft/src/BlockStairs.java new file mode 100644 index 0000000..5df1afa --- /dev/null +++ b/src/minecraft/net/minecraft/src/BlockStairs.java @@ -0,0 +1,186 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockStairs extends Block { + private Block modelBlock; + + protected BlockStairs(int var1, Block var2) { + super(var1, var2.blockIndexInTexture, var2.blockMaterial); + this.modelBlock = var2; + this.setHardness(var2.blockHardness); + this.setResistance(var2.blockResistance / 3.0F); + this.setStepSound(var2.stepSound); + this.setLightOpacity(255); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 10; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } + + public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if (var7 == 0) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 0.5F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } else if (var7 == 1) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } else if (var7 == 2) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 0.5F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } else if (var7 == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 0.5F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } + + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + this.modelBlock.randomDisplayTick(var1, var2, var3, var4, var5); + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + this.modelBlock.onBlockClicked(var1, var2, var3, var4, var5); + } + +// public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { +// this.modelBlock.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5); +// } + + public float getBlockBrightness(IBlockAccess var1, int var2, int var3, int var4) { + return this.modelBlock.getBlockBrightness(var1, var2, var3, var4); + } + + public float getExplosionResistance(Entity var1) { + return this.modelBlock.getExplosionResistance(var1); + } + + public int getRenderBlockPass() { + return this.modelBlock.getRenderBlockPass(); + } + + public int idDropped(int var1, Random var2) { + return this.blockID; + //return Block.blockDiamond.blockID; // debugging + } + + public int quantityDropped(Random var1) { + return this.modelBlock.quantityDropped(var1); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return this.modelBlock.getBlockTextureFromSideAndMetadata(var1, var2); + } + + public int getBlockTextureFromSide(int var1) { + return this.modelBlock.getBlockTextureFromSide(var1); + } + + public int getBlockTexture(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return this.modelBlock.getBlockTexture(var1, var2, var3, var4, var5); + } + + public int tickRate() { + return this.modelBlock.tickRate(); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return this.modelBlock.getSelectedBoundingBoxFromPool(var1, var2, var3, var4); + } + + public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3D var6) { + this.modelBlock.velocityToAddToEntity(var1, var2, var3, var4, var5, var6); + } + + public boolean isCollidable() { + return this.modelBlock.isCollidable(); + } + + public boolean canCollideCheck(int var1, boolean var2) { + return this.modelBlock.canCollideCheck(var1, var2); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return this.modelBlock.canPlaceBlockAt(var1, var2, var3, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + this.onNeighborBlockChange(var1, var2, var3, var4, 0); + this.modelBlock.onBlockAdded(var1, var2, var3, var4); + } + +// public void onBlockRemoval(World var1, int var2, int var3, int var4) { +// this.modelBlock.onBlockRemoval(var1, var2, var3, var4); +// } + +// public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { +// this.modelBlock.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6); +// } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + this.modelBlock.onEntityWalking(var1, var2, var3, var4, var5); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + this.modelBlock.updateTick(var1, var2, var3, var4, var5); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + return this.modelBlock.blockActivated(var1, var2, var3, var4, var5); + } + +// public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) { +// this.modelBlock.onBlockDestroyedByExplosion(var1, var2, var3, var4); +// } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) { + int var6 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if (var6 == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2); + } + + if (var6 == 1) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + } + + if (var6 == 2) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3); + } + + if (var6 == 3) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 0); + } + + } +} diff --git a/src/minecraft/net/minecraft/src/mod_AnnoyanceFix.java b/src/minecraft/net/minecraft/src/mod_AnnoyanceFix.java new file mode 100644 index 0000000..6bb97b5 --- /dev/null +++ b/src/minecraft/net/minecraft/src/mod_AnnoyanceFix.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import java.lang.reflect.Field; + +public class mod_AnnoyanceFix extends BaseMod { + + @Override + public String Version() { + return "AnnoyanceFix v1.1"; + } + + @Override + public void ModsLoaded() { + // Fix axe effectiveness + addEffectiveTools(new Item[] {Item.axeDiamond, Item.axeGold, Item.axeSteel, Item.axeStone, Item.axeWood}, + new Block[] { Block.workbench, Block.stairCompactPlanks, Block.fence, Block.doorWood }); + + // Fix pickaxe effectiveness + addEffectiveTools(new Item[] {Item.pickaxeDiamond, Item.pickaxeGold, Item.pickaxeSteel, Item.pickaxeStone, Item.pickaxeWood}, + new Block[] {Block.stoneOvenActive, Block.stoneOvenIdle, Block.stairCompactCobblestone, + Block.brick, Block.oreRedstone, Block.doorSteel, Block.rail, Block.railDetector, Block.railPowered }); + + } + + /** + * Makes specified blocks break faster using specified tools + * @param effectiveTools tools to be effective against all vulnerableBlocks + * @param vulnerableBlocks blocks that should be broken faster using speficied tools + */ + public void addEffectiveTools(Item[] effectiveTools, Block[] vulnerableBlocks) { + try { + // Get the blocksEffectiveAgainst field + Field blocksEffectiveAgainstField = ItemTool.class.getDeclaredFields()[0]; + blocksEffectiveAgainstField.setAccessible(true); + + // Make each tool effective against all specified blocks + for (Item tool : effectiveTools) { + Block[] blocksEffectiveAgainstOriginal = (Block[]) blocksEffectiveAgainstField.get(tool); + + Block[] blocksEffectiveAgainst = new Block[blocksEffectiveAgainstOriginal.length + vulnerableBlocks.length]; + + // Add original effective block list to new array + System.arraycopy(blocksEffectiveAgainstOriginal, 0, blocksEffectiveAgainst, 0, + blocksEffectiveAgainstOriginal.length); + + // Add users' effective blocks to the list + System.arraycopy(vulnerableBlocks, 0, blocksEffectiveAgainst, blocksEffectiveAgainstOriginal.length, vulnerableBlocks.length); + + blocksEffectiveAgainstField.set(tool, blocksEffectiveAgainst); + } + + } catch (SecurityException | IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + } +}