From b2255c617df823d30e3fabe02676f517138ec719 Mon Sep 17 00:00:00 2001 From: Noah Jelen Date: Mon, 23 Jul 2018 17:34:58 -0700 Subject: [PATCH] I'm finally finished! --- changelog.txt | 5 +- src/.directory | 3 + .../ParadiseMod/CustomBlockCode/RSDoor.java | 2 - .../buttonTicks/DiamondButtonTicks.java | 16 -- .../buttonTicks/EmeraldButtonTicks.java | 16 -- .../buttonTicks/IronButtonTicks.java | 16 -- .../buttonTicks/QuickButton.java | 20 +- .../ParadiseMod/CustomBlockCode/planks.java | 6 - .../pressurePlates/BedrockPlateCode.java | 10 - .../pressurePlates/DiamondPlateCode.java | 10 - .../pressurePlates/EmeraldPlateCode.java | 10 - .../ParadiseMod/CustomBlockCode/xmasTree.java | 4 - .../GUI/ContainerCustomCraftBench.java | 2 +- .../NetherNoah/ParadiseMod/ParadiseMod.java | 17 +- .../com/NetherNoah/ParadiseMod/Reference.java | 2 +- .../com/NetherNoah/ParadiseMod/Utils.java | 1 + .../ParadiseMod/config/ModConfig.java | 39 ++- .../ParadiseMod/handlers/CaveGenHandler.java | 231 ++++++++++-------- .../handlers/CustomCraftBenchGuiHandler.java | 1 + .../ParadiseMod/init/LiquidRedstone.java | 6 +- .../ParadiseMod/init/ModSmelting.java | 1 + .../ParadiseMod/items/armor/ArmorEmerald.java | 4 +- .../items/armor/ArmorObsidian.java | 4 +- .../tileentity/furnace/TEMossyFurnace.java | 4 +- .../world/dimension/DUChunkGenerator.java | 1 + .../world/dimension/DUWorldProvider.java | 1 - .../world/dimension/DVChunkGenerator.java | 21 +- .../world/dimension/DimTeleporter.java | 2 - .../world/mapgen/MapGenDUCaves.java | 11 +- .../world/mapgen/MapGenDURavines.java | 3 - .../world/worldgen/misc/ChristmasTree.java | 2 - .../{structures => misc}/DUTrees.java | 5 +- .../{structures => misc}/DUTreesGen.java | 2 +- .../world/worldgen/misc/DirtGen.java | 9 +- .../world/worldgen/ores/OreGenEnd.java | 20 +- .../world/worldgen/ores/OreGenNether.java | 20 +- .../world/worldgen/ores/OreGenOverworld.java | 19 +- .../world/worldgen/structures/EasterEgg.java | 44 ++++ .../world/worldgen/structures/EasterEgg2.java | 34 +++ .../worldgen/structures/EasterEgg2Gen.java | 46 ++++ .../worldgen/structures/EasterEggGen.java | 52 ++++ .../structures/UndergroundVillage.java | 34 +++ .../structures/UndergroundVillageGen.java | 49 ++++ .../assets/nnparadisemod/lang/en_US.lang | 6 + .../nnparadisemod/structures/easter_egg_1.nbt | Bin 0 -> 4309 bytes .../nnparadisemod/structures/easter_egg_2.nbt | Bin 0 -> 8964 bytes .../nnparadisemod/structures/filler.nbt | Bin 0 -> 24216 bytes .../structures/underground_village.nbt | Bin 0 -> 37037 bytes src/main/resources/mcmod.info | 2 +- 49 files changed, 501 insertions(+), 312 deletions(-) create mode 100644 src/.directory rename src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/{structures => misc}/DUTrees.java (96%) rename src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/{structures => misc}/DUTreesGen.java (98%) create mode 100644 src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg.java create mode 100644 src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg2.java create mode 100644 src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg2Gen.java create mode 100644 src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEggGen.java create mode 100644 src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/UndergroundVillage.java create mode 100644 src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/UndergroundVillageGen.java create mode 100644 src/main/resources/assets/nnparadisemod/structures/easter_egg_1.nbt create mode 100644 src/main/resources/assets/nnparadisemod/structures/easter_egg_2.nbt create mode 100644 src/main/resources/assets/nnparadisemod/structures/filler.nbt create mode 100644 src/main/resources/assets/nnparadisemod/structures/underground_village.nbt diff --git a/changelog.txt b/changelog.txt index aac7053..8d49e41 100644 --- a/changelog.txt +++ b/changelog.txt @@ -203,7 +203,7 @@ 1.2: Added biomes to Deep Underground For performance reasons, most of the gravel generation has been removed from the deep underground dimension. - Liquid Redstone now generate underground in lakes + Liquid Redstone now generates underground in lakes Added Glowing Ice Optimized the DU and DV chunk generators @@ -223,3 +223,6 @@ 1.3 (Cave Update): Improved cave generation (thank you for the idea, u/SaveThePhytoplankton!) + Added 2 easter eggs + Added underground villages + Optimized ore generation diff --git a/src/.directory b/src/.directory new file mode 100644 index 0000000..2c5c88b --- /dev/null +++ b/src/.directory @@ -0,0 +1,3 @@ +[Dolphin] +Timestamp=2018,7,23,17,33,53 +Version=4 diff --git a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/RSDoor.java b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/RSDoor.java index 2952187..3376821 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/RSDoor.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/RSDoor.java @@ -179,9 +179,7 @@ public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, Ent BlockPos blockpos = pos.down(); BlockPos blockpos1 = pos.up(); if (player.capabilities.isCreativeMode && state.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER && worldIn.getBlockState(blockpos).getBlock() == this) - { worldIn.setBlockToAir(blockpos); - } if (state.getValue(HALF) == BlockDoor.EnumDoorHalf.LOWER && worldIn.getBlockState(blockpos1).getBlock() == this) { if (player.capabilities.isCreativeMode) diff --git a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/DiamondButtonTicks.java b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/DiamondButtonTicks.java index 5732d3f..7c12c6a 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/DiamondButtonTicks.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/DiamondButtonTicks.java @@ -83,9 +83,7 @@ public boolean canPlaceBlockAt(World worldIn, BlockPos pos) for (EnumFacing enumfacing : EnumFacing.values()) { if (canPlaceBlock(worldIn, pos, enumfacing)) - { return true; - } } return false; } @@ -111,9 +109,7 @@ public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Bloc private boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) { if (canPlaceBlockAt(worldIn, pos)) - { return true; - } else { dropBlockAsItem(worldIn, pos, state, 0); @@ -147,9 +143,7 @@ public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, Bloc public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { if (state.getValue(POWERED).booleanValue()) - { return true; - } else { worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(true)), 3); @@ -166,9 +160,7 @@ public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, public void breakBlock(World worldIn, BlockPos pos, IBlockState state) { if (state.getValue(POWERED).booleanValue()) - { notifyNeighbors(worldIn, pos, state.getValue(FACING)); - } super.breakBlock(worldIn, pos, state); } @Override @@ -198,9 +190,7 @@ public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random ra if (state.getValue(POWERED).booleanValue()) { if (wooden) - { checkPressed(state, worldIn, pos); - } else { worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(false))); @@ -219,9 +209,7 @@ public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState s if (wooden) { if (!state.getValue(POWERED).booleanValue()) - { checkPressed(state, worldIn, pos); - } } } } @@ -245,9 +233,7 @@ private void checkPressed(IBlockState p_185616_1_, World p_185616_2_, BlockPos p playReleaseSound(p_185616_2_, p_185616_3_); } if (flag) - { p_185616_2_.scheduleUpdate(new BlockPos(p_185616_3_), this, tickRate(p_185616_2_)); - } } private void notifyNeighbors(World worldIn, BlockPos pos, EnumFacing facing) { @@ -307,9 +293,7 @@ public int getMetaFromState(IBlockState state) i = 0; } if (state.getValue(POWERED).booleanValue()) - { i |= 8; - } return i; } @Override diff --git a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/EmeraldButtonTicks.java b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/EmeraldButtonTicks.java index 02fd982..26b5698 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/EmeraldButtonTicks.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/EmeraldButtonTicks.java @@ -84,9 +84,7 @@ public boolean canPlaceBlockAt(World worldIn, BlockPos pos) for (EnumFacing enumfacing : EnumFacing.values()) { if (canPlaceBlock(worldIn, pos, enumfacing)) - { return true; - } } return false; } @@ -112,9 +110,7 @@ public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Bloc private boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) { if (canPlaceBlockAt(worldIn, pos)) - { return true; - } else { dropBlockAsItem(worldIn, pos, state, 0); @@ -148,9 +144,7 @@ public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, Bloc public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { if (state.getValue(POWERED).booleanValue()) - { return true; - } else { worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(true)), 3); @@ -167,9 +161,7 @@ public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, public void breakBlock(World worldIn, BlockPos pos, IBlockState state) { if (state.getValue(POWERED).booleanValue()) - { notifyNeighbors(worldIn, pos, state.getValue(FACING)); - } super.breakBlock(worldIn, pos, state); } @Override @@ -199,9 +191,7 @@ public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random ra if (state.getValue(POWERED).booleanValue()) { if (wooden) - { checkPressed(state, worldIn, pos); - } else { worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(false))); @@ -220,9 +210,7 @@ public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState s if (wooden) { if (!state.getValue(POWERED).booleanValue()) - { checkPressed(state, worldIn, pos); - } } } } @@ -246,9 +234,7 @@ private void checkPressed(IBlockState p_185616_1_, World p_185616_2_, BlockPos p this.playReleaseSound(p_185616_2_, p_185616_3_); } if (flag) - { p_185616_2_.scheduleUpdate(new BlockPos(p_185616_3_), this, this.tickRate(p_185616_2_)); - } } private void notifyNeighbors(World worldIn, BlockPos pos, EnumFacing facing) { @@ -309,9 +295,7 @@ public int getMetaFromState(IBlockState state) i = 0; } if (state.getValue(POWERED).booleanValue()) - { i |= 8; - } return i; } @Override diff --git a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/IronButtonTicks.java b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/IronButtonTicks.java index e5c8ae8..12c4a4c 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/IronButtonTicks.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/IronButtonTicks.java @@ -83,9 +83,7 @@ public boolean canPlaceBlockAt(World worldIn, BlockPos pos) for (EnumFacing enumfacing : EnumFacing.values()) { if (canPlaceBlock(worldIn, pos, enumfacing)) - { return true; - } } return false; } @@ -111,9 +109,7 @@ public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Bloc private boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) { if (canPlaceBlockAt(worldIn, pos)) - { return true; - } else { dropBlockAsItem(worldIn, pos, state, 0); @@ -148,9 +144,7 @@ public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, Bloc public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { if (state.getValue(POWERED).booleanValue()) - { return true; - } else { worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(true)), 3); @@ -167,9 +161,7 @@ public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, public void breakBlock(World worldIn, BlockPos pos, IBlockState state) { if (state.getValue(POWERED).booleanValue()) - { notifyNeighbors(worldIn, pos, state.getValue(FACING)); - } super.breakBlock(worldIn, pos, state); } @Override @@ -199,9 +191,7 @@ public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random ra if (state.getValue(POWERED).booleanValue()) { if (wooden) - { checkPressed(state, worldIn, pos); - } else { worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(false))); @@ -220,9 +210,7 @@ public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState s if (wooden) { if (!state.getValue(POWERED).booleanValue()) - { checkPressed(state, worldIn, pos); - } } } } @@ -246,9 +234,7 @@ private void checkPressed(IBlockState p_185616_1_, World p_185616_2_, BlockPos p playReleaseSound(p_185616_2_, p_185616_3_); } if (flag) - { p_185616_2_.scheduleUpdate(new BlockPos(p_185616_3_), this, tickRate(p_185616_2_)); - } } private void notifyNeighbors(World worldIn, BlockPos pos, EnumFacing facing) { @@ -310,9 +296,7 @@ public int getMetaFromState(IBlockState state) i = 0; } if (state.getValue(POWERED).booleanValue()) - { i |= 8; - } return i; } @Override diff --git a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/QuickButton.java b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/QuickButton.java index af8b8b7..ac1c431 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/QuickButton.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/buttonTicks/QuickButton.java @@ -85,9 +85,8 @@ public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) @Override public boolean canPlaceBlockAt(World worldIn, BlockPos pos) { for (EnumFacing enumfacing : EnumFacing.values()) { - if (canPlaceBlock(worldIn, pos, enumfacing)) { + if (canPlaceBlock(worldIn, pos, enumfacing)) return true; - } } return false; } @@ -112,9 +111,9 @@ public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Bloc } } private boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) { - if (canPlaceBlockAt(worldIn, pos)) { + if (canPlaceBlockAt(worldIn, pos)) return true; - } else { + else { dropBlockAsItem(worldIn, pos, state, 0); worldIn.setBlockToAir(pos); return false; @@ -182,9 +181,9 @@ public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random ra public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) { if (!worldIn.isRemote) { if (state.getValue(POWERED).booleanValue()) { - if (wooden) { + if (wooden) checkPressed(state, worldIn, pos); - } else { + else { worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(false))); notifyNeighbors(worldIn, pos, state.getValue(FACING)); playReleaseSound(worldIn, pos); @@ -197,9 +196,8 @@ public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random ra public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) { if (!worldIn.isRemote) { if (wooden) { - if (!state.getValue(POWERED).booleanValue()) { + if (!state.getValue(POWERED).booleanValue()) checkPressed(state, worldIn, pos); - } } } } @@ -220,9 +218,8 @@ private void checkPressed(IBlockState p_185616_1_, World p_185616_2_, BlockPos p p_185616_2_.markBlockRangeForRenderUpdate(p_185616_3_, p_185616_3_); playReleaseSound(p_185616_2_, p_185616_3_); } - if (flag) { + if (flag) p_185616_2_.scheduleUpdate(new BlockPos(p_185616_3_), this, tickRate(p_185616_2_)); - } } private void notifyNeighbors(World worldIn, BlockPos pos, EnumFacing facing) { worldIn.notifyNeighborsOfStateChange(pos, this, false); @@ -277,9 +274,8 @@ public int getMetaFromState(IBlockState state) { case DOWN: i = 0; } - if (state.getValue(POWERED).booleanValue()) { + if (state.getValue(POWERED).booleanValue()) i |= 8; - } return i; } @Override diff --git a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/planks.java b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/planks.java index c2f4c61..4aa6a70 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/planks.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/planks.java @@ -34,9 +34,7 @@ public int damageDropped(IBlockState state) public void getSubBlocks(Item itemIn, CreativeTabs tab, NonNullList list) { for (planks.EnumType blockplanks$enumtype : planks.EnumType.values()) - { list.add(new ItemStack(itemIn, 1, blockplanks$enumtype.getMetadata())); - } } @Override public IBlockState getStateFromMeta(int meta) @@ -92,9 +90,7 @@ public String toString() public static planks.EnumType byMetadata(int meta) { if (meta < 0 || meta >= META_LOOKUP.length) - { meta = 0; - } return META_LOOKUP[meta]; } @Override @@ -109,9 +105,7 @@ public String getUnlocalizedName() static { for (planks.EnumType blockplanks$enumtype : values()) - { META_LOOKUP[blockplanks$enumtype.getMetadata()] = blockplanks$enumtype; - } } } } \ No newline at end of file diff --git a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/BedrockPlateCode.java b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/BedrockPlateCode.java index 95fb841..d250702 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/BedrockPlateCode.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/BedrockPlateCode.java @@ -41,25 +41,17 @@ protected IBlockState setRedstoneStrength(IBlockState state, int strength) protected void playClickOnSound(World worldIn, BlockPos color) { if (blockMaterial == Material.WOOD) - { worldIn.playSound((EntityPlayer)null, color, SoundEvents.BLOCK_WOOD_PRESSPLATE_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.8F); - } else - { worldIn.playSound((EntityPlayer)null, color, SoundEvents.BLOCK_STONE_PRESSPLATE_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.6F); - } } @Override protected void playClickOffSound(World worldIn, BlockPos pos) { if (blockMaterial == Material.WOOD) - { worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_WOOD_PRESSPLATE_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.7F); - } else - { worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_STONE_PRESSPLATE_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.5F); - } } @Override protected int computeRedstoneStrength(World worldIn, BlockPos pos) @@ -85,9 +77,7 @@ protected int computeRedstoneStrength(World worldIn, BlockPos pos) for (Entity entity : list) { if (!entity.doesEntityNotTriggerPressurePlate()) - { return 15; - } } } return 0; diff --git a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/DiamondPlateCode.java b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/DiamondPlateCode.java index 848ed71..1e73446 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/DiamondPlateCode.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/DiamondPlateCode.java @@ -41,25 +41,17 @@ protected IBlockState setRedstoneStrength(IBlockState state, int strength) protected void playClickOnSound(World worldIn, BlockPos color) { if (blockMaterial == Material.WOOD) - { worldIn.playSound((EntityPlayer)null, color, SoundEvents.BLOCK_WOOD_PRESSPLATE_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.8F); - } else - { worldIn.playSound((EntityPlayer)null, color, SoundEvents.BLOCK_STONE_PRESSPLATE_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.6F); - } } @Override protected void playClickOffSound(World worldIn, BlockPos pos) { if (blockMaterial == Material.WOOD) - { worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_WOOD_PRESSPLATE_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.7F); - } else - { worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_STONE_PRESSPLATE_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.5F); - } } @Override protected int computeRedstoneStrength(World worldIn, BlockPos pos) @@ -83,9 +75,7 @@ protected int computeRedstoneStrength(World worldIn, BlockPos pos) for (Entity entity : list) { if (!entity.doesEntityNotTriggerPressurePlate()) - { return 7; - } } } return 0; diff --git a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/EmeraldPlateCode.java b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/EmeraldPlateCode.java index 1a99ca0..8ada4e3 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/EmeraldPlateCode.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/pressurePlates/EmeraldPlateCode.java @@ -41,25 +41,17 @@ protected IBlockState setRedstoneStrength(IBlockState state, int strength) protected void playClickOnSound(World worldIn, BlockPos color) { if (blockMaterial == Material.WOOD) - { worldIn.playSound((EntityPlayer)null, color, SoundEvents.BLOCK_WOOD_PRESSPLATE_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.8F); - } else - { worldIn.playSound((EntityPlayer)null, color, SoundEvents.BLOCK_STONE_PRESSPLATE_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.6F); - } } @Override protected void playClickOffSound(World worldIn, BlockPos pos) { if (blockMaterial == Material.WOOD) - { worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_WOOD_PRESSPLATE_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.7F); - } else - { worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_STONE_PRESSPLATE_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.5F); - } } @Override protected int computeRedstoneStrength(World worldIn, BlockPos pos) @@ -83,9 +75,7 @@ protected int computeRedstoneStrength(World worldIn, BlockPos pos) for (Entity entity : list) { if (!entity.doesEntityNotTriggerPressurePlate()) - { return 5; - } } } return 0; diff --git a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/xmasTree.java b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/xmasTree.java index 28bf9e9..61bdbf4 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/xmasTree.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/CustomBlockCode/xmasTree.java @@ -104,9 +104,7 @@ public void generateTree(World worldIn, BlockPos pos, IBlockState state, Random worldIn.setBlockState(pos.add(i + 1, 0, j + 1), iblockstate2, 4); } else - { worldIn.setBlockState(pos, iblockstate2, 4); - } if (!worldgenerator.generate(worldIn, rand, pos.add(i, 0, j))) { if (flag) @@ -138,9 +136,7 @@ public int damageDropped(IBlockState state) public void getSubBlocks(Item itemIn, CreativeTabs tab, NonNullList list) { for (planks.EnumType planks$enumtype : planks.EnumType.values()) - { list.add(new ItemStack(itemIn, 1, planks$enumtype.getMetadata())); - } } @Override public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) diff --git a/src/main/java/com/NetherNoah/ParadiseMod/GUI/ContainerCustomCraftBench.java b/src/main/java/com/NetherNoah/ParadiseMod/GUI/ContainerCustomCraftBench.java index 4becc18..d06fbc1 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/GUI/ContainerCustomCraftBench.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/GUI/ContainerCustomCraftBench.java @@ -46,5 +46,5 @@ else if (!mergeItemStack(slotStack, 10, 46, false)) @Override public boolean canInteractWith(EntityPlayer arg0) { return true; - } + } } \ No newline at end of file diff --git a/src/main/java/com/NetherNoah/ParadiseMod/ParadiseMod.java b/src/main/java/com/NetherNoah/ParadiseMod/ParadiseMod.java index 3eac39f..054e26d 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/ParadiseMod.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/ParadiseMod.java @@ -37,13 +37,15 @@ import com.NetherNoah.ParadiseMod.tileentity.hopper.TileEntityGoldHopper; import com.NetherNoah.ParadiseMod.tileentity.hopper.TileEntitySilverHopper; import com.NetherNoah.ParadiseMod.world.dimension.DimensionRegistry; +import com.NetherNoah.ParadiseMod.world.worldgen.misc.DUTrees; import com.NetherNoah.ParadiseMod.world.worldgen.misc.DirtGen; import com.NetherNoah.ParadiseMod.world.worldgen.misc.Rose; import com.NetherNoah.ParadiseMod.world.worldgen.ores.OreGenEnd; import com.NetherNoah.ParadiseMod.world.worldgen.ores.OreGenNether; import com.NetherNoah.ParadiseMod.world.worldgen.ores.OreGenOverworld; import com.NetherNoah.ParadiseMod.world.worldgen.structures.Buoy; -import com.NetherNoah.ParadiseMod.world.worldgen.structures.DUTrees; +import com.NetherNoah.ParadiseMod.world.worldgen.structures.EasterEgg; +import com.NetherNoah.ParadiseMod.world.worldgen.structures.EasterEgg2; import com.NetherNoah.ParadiseMod.world.worldgen.structures.GiantGrassBlock; import com.NetherNoah.ParadiseMod.world.worldgen.structures.Home; import com.NetherNoah.ParadiseMod.world.worldgen.structures.Ocean; @@ -52,6 +54,7 @@ import com.NetherNoah.ParadiseMod.world.worldgen.structures.Runway; import com.NetherNoah.ParadiseMod.world.worldgen.structures.SkyWheel; import com.NetherNoah.ParadiseMod.world.worldgen.structures.TreasureChest; +import com.NetherNoah.ParadiseMod.world.worldgen.structures.UndergroundVillage; import com.NetherNoah.ParadiseMod.world.worldgen.structures.WickerMan; import com.NetherNoah.ParadiseMod.world.worldgen.structures.AttieCat.JeffTank; import com.NetherNoah.ParadiseMod.world.worldgen.structures.AttieCat.Shrine; @@ -193,12 +196,18 @@ public void preInit(FMLPreInitializationEvent event) { new Rose(), //trees in the Deep Underground - new DUTrees() + new DUTrees(), + + //easter egg + new EasterEgg(), + new EasterEgg2(), + + //underground villages + new UndergroundVillage() }; - for(int i=0;i= 19) { + if (blockToReplace == Blocks.STONE && blockAbove == Blocks.AIR && y >= 19) theChunk.setBlockState(new BlockPos(x, y, z), Blocks.GRASS.getDefaultState()); - } - //vines - if (blockToReplace == Blocks.STONE&&(jungle||swamp)&&y>=20) { + // vines + if (blockToReplace == Blocks.STONE&&y>=19) { // east - if (theChunk.getBlockState(x + 1, y, z).getBlock() == Blocks.AIR&& rand.nextInt(10) == 0) + if (theChunk.getBlockState(x + 1, y, z).getBlock() == Blocks.AIR&& rand.nextInt(10) == 0&&x!=15) theChunk.setBlockState(new BlockPos(x + 1, y, z),Blocks.VINE.getDefaultState().withProperty(BlockVine.WEST, true)); // west - if ( theChunk.getBlockState(x - 1, y, z).getBlock() == Blocks.AIR&& rand.nextInt(10) == 0) + if (theChunk.getBlockState(x - 1, y, z).getBlock() == Blocks.AIR && rand.nextInt(10) == 0&&x!=0) theChunk.setBlockState(new BlockPos(x - 1, y, z),Blocks.VINE.getDefaultState().withProperty(BlockVine.EAST, true)); // south - if (theChunk.getBlockState(x, y, z + 1).getBlock() == Blocks.AIR && rand.nextInt(10) == 0) + if (theChunk.getBlockState(x, y, z + 1).getBlock() == Blocks.AIR && rand.nextInt(10) == 0&&z!=15) theChunk.setBlockState(new BlockPos(x, y, z + 1),Blocks.VINE.getDefaultState().withProperty(BlockVine.NORTH, true)); // north - if ( blockToReplace == Blocks.STONE&& theChunk.getBlockState(x, y, z - 1).getBlock() == Blocks.AIR&& rand.nextInt(10) == 0) - theChunk.setBlockState(new BlockPos(x, y, z - 1), Blocks.VINE.getDefaultState().withProperty(BlockVine.SOUTH, true)); + if (theChunk.getBlockState(x, y, z - 1).getBlock() == Blocks.AIR && rand.nextInt(10) == 0&&z!=0) + theChunk.setBlockState(new BlockPos(x, y, z - 1),Blocks.VINE.getDefaultState().withProperty(BlockVine.SOUTH, true)); } - + } - //swamp only features + // swamp only features if (swamp) { - //replace some of the grass with slime - if(blockToReplace==Blocks.GRASS&&(rand.nextInt(10)==0)&&y<56) - theChunk.setBlockState(new BlockPos(x, y, z), Blocks.SLIME_BLOCK.getDefaultState()); - //tall grass - if(blockToReplace==Blocks.GRASS&&rand.nextInt(5)==0&&y<56) - theChunk.setBlockState(new BlockPos(x, y+1, z), Blocks.TALLGRASS.getDefaultState().withProperty(BlockTallGrass.TYPE, BlockTallGrass.EnumType.GRASS)); + + // replace some of the grass with slime + if (blockToReplace == Blocks.GRASS && (rand.nextInt(10) == 0) && y < height) + theChunk.setBlockState(new BlockPos(x, y, z), Blocks.SLIME_BLOCK.getDefaultState()); + + // tall grass + if (blockToReplace == Blocks.GRASS && rand.nextInt(2) == 0 && y < height) + theChunk.setBlockState(new BlockPos(x, y + 1, z), Blocks.TALLGRASS.getDefaultState().withProperty(BlockTallGrass.TYPE, BlockTallGrass.EnumType.GRASS)); } - - //mushroom island only features + + // mushroom island only features if (mushroom) { // replace ground stone with mycelium - if ( blockToReplace == Blocks.STONE && blockAbove == Blocks.AIR) { + if (blockToReplace == Blocks.STONE && blockAbove == Blocks.AIR) theChunk.setBlockState(new BlockPos(x, y, z), Blocks.MYCELIUM.getDefaultState()); - } - //little mushrooms - if(blockToReplace==Blocks.MYCELIUM&&y<56&&rand.nextInt(4)==0) { - BlockPos pos = new BlockPos(x, y+1, z); - theChunk.setBlockState(pos, Blocks.RED_MUSHROOM.getDefaultState()); - } + // little mushrooms + // red + if (blockToReplace == Blocks.MYCELIUM && y < height && rand.nextInt(4) == 0) + theChunk.setBlockState(new BlockPos(x, y + 1, z), Blocks.RED_MUSHROOM.getDefaultState()); + + // brown + if (blockToReplace == Blocks.MYCELIUM && y < height && rand.nextInt(2) == 0) + theChunk.setBlockState(new BlockPos(x, y + 1, z), Blocks.BROWN_MUSHROOM.getDefaultState()); - if(blockToReplace==Blocks.MYCELIUM&&y<56&&rand.nextInt(2)==0) { - BlockPos pos = new BlockPos(x, y+1, z); - theChunk.setBlockState(pos, Blocks.BROWN_MUSHROOM.getDefaultState()); + // the cave is a giant mushroom! + if (blockToReplace == Blocks.STONE && blockBelow == Blocks.AIR) { + int a = 1; + theChunk.setBlockState(new BlockPos(x, y, z), Blocks.BROWN_MUSHROOM_BLOCK.getDefaultState().withProperty(BlockHugeMushroom.VARIANT, BlockHugeMushroom.EnumType.CENTER)); + if (rand.nextInt(20) == 0) { + Block blockToReplace2 = theChunk.getBlockState(x, y - 1, z).getBlock(); + while (blockToReplace2 == Blocks.AIR || blockToReplace2 == Blocks.WATER|| blockToReplace2 == Blocks.FLOWING_LAVA|| blockToReplace2 == Blocks.FLOWING_WATER || blockToReplace2 == Blocks.LAVA) { + theChunk.setBlockState(new BlockPos(x, y - a, z),Blocks.BROWN_MUSHROOM_BLOCK.getDefaultState().withProperty(BlockHugeMushroom.VARIANT, BlockHugeMushroom.EnumType.STEM)); + a++; + blockToReplace2 = theChunk.getBlockState(x, y - a, z).getBlock(); + } + } } - } - //shrubs in mesa and desert biomes - if((mesa||desert)&&(blockToReplace==Blocks.HARDENED_CLAY||blockToReplace==Blocks.STAINED_HARDENED_CLAY||blockToReplace==Blocks.SANDSTONE)&&blockAbove==Blocks.AIR&&rand.nextInt(5)==0&&y<56) - theChunk.setBlockState(new BlockPos(x, y+1, z), Blocks.DEADBUSH.getDefaultState()); - - //generate lots of crystals - if(rand.nextInt(2)==0&&crystal&&(blockToReplace == Blocks.STONE || blockToReplace == Blocks.SANDSTONE|| blockToReplace == Blocks.PACKED_ICE || blockToReplace == Blocks.HARDENED_CLAY|| blockToReplace == Blocks.STAINED_HARDENED_CLAY||blockToReplace==Blocks.MYCELIUM||blockToReplace==Blocks.GRASS)&&blockAbove==Blocks.AIR&&y 0) } } - /** - * Generates the chunk at the specified position, from scratch - */ @Override public Chunk generateChunk(int x, int z) { @@ -334,16 +331,11 @@ public void populate(int x, int z) if (net.minecraftforge.event.terraingen.TerrainGen.decorate(world, rand, blockpos,DecorateBiomeEvent.Decorate.EventType.SHROOM)) { if (rand.nextBoolean()) { //crystals - quartzGen.generate(world, rand, - blockpos.add(rand.nextInt(16) + 8, rand.nextInt(256), rand.nextInt(16) + 8)); - diamondGen.generate(world, rand, - blockpos.add(rand.nextInt(16) + 8, rand.nextInt(256), rand.nextInt(16) + 8)); - emeraldGen.generate(world, rand, - blockpos.add(rand.nextInt(16) + 8, rand.nextInt(256), rand.nextInt(16) + 8)); - redstoneGen.generate(world, rand, - blockpos.add(rand.nextInt(16) + 8, rand.nextInt(256), rand.nextInt(16) + 8)); - rubyGen.generate(world, rand, - blockpos.add(rand.nextInt(16) + 8, rand.nextInt(256), rand.nextInt(16) + 8)); + quartzGen.generate(world, rand, blockpos.add(rand.nextInt(16) + 8, rand.nextInt(256), rand.nextInt(16) + 8)); + diamondGen.generate(world, rand,blockpos.add(rand.nextInt(16) + 8, rand.nextInt(256), rand.nextInt(16) + 8)); + emeraldGen.generate(world, rand,blockpos.add(rand.nextInt(16) + 8, rand.nextInt(256), rand.nextInt(16) + 8)); + redstoneGen.generate(world, rand,blockpos.add(rand.nextInt(16) + 8, rand.nextInt(256), rand.nextInt(16) + 8)); + rubyGen.generate(world, rand,blockpos.add(rand.nextInt(16) + 8, rand.nextInt(256), rand.nextInt(16) + 8)); } } if (TerrainGen.generateOre(world, rand, coalGen, blockpos,OreGenEvent.GenerateMinable.EventType.QUARTZ)) @@ -357,9 +349,6 @@ public void populate(int x, int z) } } - /** - * Called to generate additional structures after initial worldgen, used by ocean monuments - */ @Override public boolean generateStructures(Chunk chunkIn, int x, int z) { diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/dimension/DimTeleporter.java b/src/main/java/com/NetherNoah/ParadiseMod/world/dimension/DimTeleporter.java index 98745bc..b64b646 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/world/dimension/DimTeleporter.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/dimension/DimTeleporter.java @@ -263,9 +263,7 @@ public boolean makePortal(Entity entityIn) int k5 = l2 + (k4 - 1) * i4 - j4 * l3; blockpos$mutableblockpos.setPos(i5, j5, k5); if (l4 < 0 && !worldServerInstance.getBlockState(blockpos$mutableblockpos).getMaterial().isSolid() || l4 >= 0 && !worldServerInstance.isAirBlock(blockpos$mutableblockpos)) - { continue label146; - } } } } diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/mapgen/MapGenDUCaves.java b/src/main/java/com/NetherNoah/ParadiseMod/world/mapgen/MapGenDUCaves.java index b39b3b5..133347e 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/world/mapgen/MapGenDUCaves.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/mapgen/MapGenDUCaves.java @@ -20,7 +20,7 @@ public class MapGenDUCaves extends MapGenBase{ protected static final IBlockState WATER = Blocks.WATER.getDefaultState(); protected void addRoom(long p_180703_1_, int p_180703_3_, int p_180703_4_, ChunkPrimer primer, double p_180703_6_, double p_180703_8_, double p_180703_10_){ - this.addTunnel(p_180703_1_, p_180703_3_, p_180703_4_, primer, p_180703_6_, p_180703_8_, p_180703_10_, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + addTunnel(p_180703_1_, p_180703_3_, p_180703_4_, primer, p_180703_6_, p_180703_8_, p_180703_10_, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); } protected void addTunnel(long p_180702_1_, int p_180702_3_, int p_180702_4_, ChunkPrimer primer, double p_180702_6_, double p_180702_8_, double p_180702_10_, float p_180702_12_, float p_180702_13_, float p_180702_14_, int p_180702_15_, int p_180702_16_, double p_180702_17_){ @@ -31,7 +31,7 @@ protected void addTunnel(long p_180702_1_, int p_180702_3_, int p_180702_4_, Chu Random random = new Random(p_180702_1_); if (p_180702_16_ <= 0){ - int i = this.range * 16 - 16; + int i = range * 16 - 16; p_180702_16_ = i - random.nextInt(i / 4); } @@ -66,8 +66,8 @@ protected void addTunnel(long p_180702_1_, int p_180702_3_, int p_180702_4_, Chu f = f + (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; if (!flag2 && p_180702_15_ == j && p_180702_12_ > 1.0F && p_180702_16_ > 0){ - this.addTunnel(random.nextLong(), p_180702_3_, p_180702_4_, primer, p_180702_6_, p_180702_8_, p_180702_10_, random.nextFloat() * 0.5F + 0.5F, p_180702_13_ - ((float)Math.PI / 2F), p_180702_14_ / 3.0F, p_180702_15_, p_180702_16_, 1.0D); - this.addTunnel(random.nextLong(), p_180702_3_, p_180702_4_, primer, p_180702_6_, p_180702_8_, p_180702_10_, random.nextFloat() * 0.5F + 0.5F, p_180702_13_ + ((float)Math.PI / 2F), p_180702_14_ / 3.0F, p_180702_15_, p_180702_16_, 1.0D); + addTunnel(random.nextLong(), p_180702_3_, p_180702_4_, primer, p_180702_6_, p_180702_8_, p_180702_10_, random.nextFloat() * 0.5F + 0.5F, p_180702_13_ - ((float)Math.PI / 2F), p_180702_14_ / 3.0F, p_180702_15_, p_180702_16_, 1.0D); + addTunnel(random.nextLong(), p_180702_3_, p_180702_4_, primer, p_180702_6_, p_180702_8_, p_180702_10_, random.nextFloat() * 0.5F + 0.5F, p_180702_13_ + ((float)Math.PI / 2F), p_180702_14_ / 3.0F, p_180702_15_, p_180702_16_, 1.0D); return; } @@ -169,9 +169,6 @@ else if (block1.getBlock()==Blocks.FLOWING_WATER||block1.getBlock()==Blocks.WATE return (block1.getBlock() == Blocks.SAND || block1.getBlock() == Blocks.GRAVEL) && block2.getMaterial() != Material.WATER; } - /** - * Recursively called by generate() - */ protected void recursiveGenerate(World worldIn, int chunkX, int chunkZ, int originalX, int originalZ, ChunkPrimer chunkPrimerIn){ int i = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(15) + 1) + 1); diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/mapgen/MapGenDURavines.java b/src/main/java/com/NetherNoah/ParadiseMod/world/mapgen/MapGenDURavines.java index 94bc51e..cc9214d 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/world/mapgen/MapGenDURavines.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/mapgen/MapGenDURavines.java @@ -131,9 +131,6 @@ protected void addTunnel(long p_180707_1_, int p_180707_3_, int p_180707_4_, Chu } } - /** - * Recursively called by generate() - */ protected void recursiveGenerate(World worldIn, int chunkX, int chunkZ, int originalX, int originalZ, ChunkPrimer chunkPrimerIn){ if (this.rand.nextInt(50) == 0){ double d0 = (double)(chunkX * 16 + this.rand.nextInt(16)); diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/ChristmasTree.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/ChristmasTree.java index 6c90f05..eb0c013 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/ChristmasTree.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/ChristmasTree.java @@ -81,9 +81,7 @@ public boolean generate(World worldIn, Random rand, BlockPos position) BlockPos blockpos = new BlockPos(i2, j4, k2); state = worldIn.getBlockState(blockpos); if (state.getBlock().canBeReplacedByLeaves(state, worldIn, blockpos)) - { setBlockAndNotifyAdequately(worldIn, blockpos, LEAF); - } } } } diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/DUTrees.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/DUTrees.java similarity index 96% rename from src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/DUTrees.java rename to src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/DUTrees.java index f2c158a..54db29e 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/DUTrees.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/DUTrees.java @@ -1,4 +1,4 @@ -package com.NetherNoah.ParadiseMod.world.worldgen.structures; +package com.NetherNoah.ParadiseMod.world.worldgen.misc; import java.util.Random; @@ -45,4 +45,5 @@ public static int getGroundFromAbove(World world, int x, int z) public boolean generate(World worldIn, Random rand, BlockPos position) { return false; } -} \ No newline at end of file +} + diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/DUTreesGen.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/DUTreesGen.java similarity index 98% rename from src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/DUTreesGen.java rename to src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/DUTreesGen.java index 4f0248e..ac4d2cc 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/DUTreesGen.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/DUTreesGen.java @@ -1,4 +1,4 @@ -package com.NetherNoah.ParadiseMod.world.worldgen.structures; +package com.NetherNoah.ParadiseMod.world.worldgen.misc; import java.util.Random; diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/DirtGen.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/DirtGen.java index 996dadf..330131c 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/DirtGen.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/misc/DirtGen.java @@ -19,13 +19,8 @@ public void generate(Random random, int chunkX, int chunkZ, World world, IChunkG generateOverworld(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider); } private void generateOverworld(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider){ - int dirtOrSand=random.nextInt(3); - if (dirtOrSand==1) - generateOre(Blocks.DIRT.getDefaultState(), world, random, chunkX * 16, chunkZ * 16, 16, 64, 4 + random.nextInt(55), 6); - if (dirtOrSand==2) - generateOre(Blocks.SAND.getDefaultState(), world, random, chunkX * 16, chunkZ * 16, 16, 64, 4 + random.nextInt(55), 6); - else - generateOre(Blocks.CLAY.getDefaultState(), world, random, chunkX * 16, chunkZ * 16, 16, 64, 4 + random.nextInt(55), 6); + IBlockState[] earth= {Blocks.DIRT.getDefaultState(),Blocks.SAND.getDefaultState(),Blocks.CLAY.getDefaultState()}; + generateOre(earth[random.nextInt(3)], world, random, chunkX * 16, chunkZ * 16, 16, 64, 4 + random.nextInt(55), 6); } private void generateOre(IBlockState ore, World world, Random random, int x, int z, int minY, int maxY, int size, int chances) { int deltaY = maxY - minY; diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenEnd.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenEnd.java index 553934f..386c645 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenEnd.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenEnd.java @@ -18,24 +18,12 @@ public class OreGenEnd implements IWorldGenerator { @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { - if (world.provider.getDimension() == 1) { - if (ModConfig.worldgen.GenerateEndOres==true) - generateEnd(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider); - } + if ((world.provider.getDimension() == 1)&&ModConfig.worldgen.GenerateEndOres) + generateEnd(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider); } private void generateEnd(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { - int selectOreEnd=random.nextInt(3); - - IBlockState oreSelectionEnd=null; - - if (selectOreEnd==0) - oreSelectionEnd=Ores.EndRubyOre.getDefaultState(); - if (selectOreEnd==1) - oreSelectionEnd=Ores.EndRubyOre.getDefaultState(); - if (selectOreEnd==2) - oreSelectionEnd=Ores.VoidPearlOre.getDefaultState(); - - generateOre(oreSelectionEnd, world, random, chunkX * 16, chunkZ * 16, 16, 64, 4 + random.nextInt(15), 6); + IBlockState[]endOres= {Ores.EndRubyOre.getDefaultState(),Ores.EnderPearlOre.getDefaultState(),Ores.VoidPearlOre.getDefaultState()}; + generateOre(endOres[random.nextInt(3)], world, random, chunkX * 16, chunkZ * 16, 16, 64, 4 + random.nextInt(15), 6); } private void generateOre(IBlockState ore, World world, Random random, int x, int z, int minY, int maxY, int size, int chances) { int deltaY = maxY - minY; diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenNether.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenNether.java index e312231..04a520d 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenNether.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenNether.java @@ -18,24 +18,12 @@ public class OreGenNether implements IWorldGenerator { @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { - if (world.provider.getDimension() == -1) { - if (ModConfig.worldgen.GenerateNetherOres==true) - generateNether(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider); - } + if ((world.provider.getDimension() == -1)&&ModConfig.worldgen.GenerateNetherOres) + generateNether(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider); } private void generateNether(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { - int selectOreNether=random.nextInt(2); - - //silver ore (nether variant) - IBlockState oreSelectionNether=Ores.SilverOreNether.getDefaultState(); - - //gold ore (nether variant) - if (selectOreNether==1) - oreSelectionNether=Ores.GoldOreNether.getDefaultState(); - else - oreSelectionNether=Ores.SilverOreNether.getDefaultState(); - - generateOre(oreSelectionNether, world, random, chunkX * 16, chunkZ * 16, 16, 64, 4 + random.nextInt(15), 6); + IBlockState [] netherOres= {Ores.SilverOreNether.getDefaultState(),Ores.GoldOreNether.getDefaultState()}; + generateOre(netherOres[random.nextInt(2)], world, random, chunkX * 16, chunkZ * 16, 16, 64, 4 + random.nextInt(15), 6); } private void generateOre(IBlockState ore, World world, Random random, int x, int z, int minY, int maxY, int size, int chances) { int deltaY = maxY - minY; diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenOverworld.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenOverworld.java index eff7766..39aa486 100644 --- a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenOverworld.java +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/ores/OreGenOverworld.java @@ -18,25 +18,12 @@ public class OreGenOverworld implements IWorldGenerator { @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { - if (ModConfig.worldgen.GenerateOverworldOres==true || world.provider.getDimension() !=0) + if ((world.provider.getDimension()==0)&&ModConfig.worldgen.GenerateOverworldOres==true) generateOverworld(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider); } private void generateOverworld(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { - int selectOreOverworld=random.nextInt(3); - - //salt ore - IBlockState oreSelectionOverworld=Ores.SaltOre.getDefaultState(); - - //ruby ore - if (selectOreOverworld==0) - oreSelectionOverworld=Ores.RubyOre.getDefaultState(); - - //silver ore - else if (selectOreOverworld==1) - oreSelectionOverworld=Ores.SilverOre.getDefaultState(); - else - oreSelectionOverworld=Ores.SaltOre.getDefaultState(); - generateOre(oreSelectionOverworld, world, random, chunkX * 16, chunkZ * 16, 16, 64, 4 + random.nextInt(4), 6); + IBlockState[] ores= {Ores.SaltOre.getDefaultState(),Ores.RubyOre.getDefaultState(),Ores.SilverOre.getDefaultState()}; + generateOre(ores[random.nextInt(3)], world, random, chunkX * 16, chunkZ * 16, 16, 64, 4 + random.nextInt(4), 6); } private void generateOre(IBlockState ore, World world, Random random, int x, int z, int minY, int maxY, int size, int chances) { int deltaY = maxY - minY; diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg.java new file mode 100644 index 0000000..6dfa947 --- /dev/null +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg.java @@ -0,0 +1,44 @@ +package com.NetherNoah.ParadiseMod.world.worldgen.structures; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.fml.common.IWorldGenerator; + +public class EasterEgg extends WorldGenerator implements IWorldGenerator{ + @Override + public void generate(Random rand, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, + IChunkProvider chunkProvider) { + int blockX = chunkX * 16; + int blockZ = chunkZ * 16; + generateOverworld(world, rand, blockX + 8, blockZ + 8); + } + private void generateOverworld(World world, Random rand, int blockX, int blockZ) + { + int y = getGroundFromAbove(world, blockX, blockZ); + BlockPos pos = new BlockPos(blockX, y, blockZ); + WorldGenerator structure = new EasterEggGen(); + structure.generate(world, rand, pos); + } + public static int getGroundFromAbove(World world, int x, int z) + { + int y = 255; + boolean foundGround = false; + while(!foundGround && y-- >= 63) + { + Block blockAt = world.getBlockState(new BlockPos(x,y,z)).getBlock(); + foundGround = blockAt == Blocks.GRASS||blockAt == Blocks.DIRT||blockAt == Blocks.STONE||blockAt == Blocks.WATER; + } + return y; + } + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) { + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg2.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg2.java new file mode 100644 index 0000000..0525775 --- /dev/null +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg2.java @@ -0,0 +1,34 @@ +package com.NetherNoah.ParadiseMod.world.worldgen.structures; + +import java.util.Random; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.fml.common.IWorldGenerator; + +public class EasterEgg2 extends WorldGenerator implements IWorldGenerator{ + + @Override + public void generate(Random rand, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, + IChunkProvider chunkProvider) { + int blockX = chunkX * 16; + int blockZ = chunkZ * 16; + if (world.provider.getDimension() == 0) + generateOverworld(world, rand, blockX + 8, blockZ + 8); + } + + private void generateOverworld(World world, Random rand, int blockX, int blockZ) + { + BlockPos pos = new BlockPos(blockX, 30, blockZ); + WorldGenerator structure = new EasterEgg2Gen(); + structure.generate(world, rand, pos); + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) { + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg2Gen.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg2Gen.java new file mode 100644 index 0000000..47e0283 --- /dev/null +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEgg2Gen.java @@ -0,0 +1,46 @@ +package com.NetherNoah.ParadiseMod.world.worldgen.structures; + +import java.util.Random; + +import com.NetherNoah.ParadiseMod.Reference; +import com.NetherNoah.ParadiseMod.config.ModConfig; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.Mirror; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraft.world.gen.structure.template.PlacementSettings; +import net.minecraft.world.gen.structure.template.Template; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class EasterEgg2Gen extends WorldGenerator { + @Override + public boolean generate(World world, Random rand, BlockPos position) { + WorldServer worldserver = (WorldServer) world; + MinecraftServer minecraftserver = world.getMinecraftServer(); + TemplateManager templatemanager = worldserver.getStructureTemplateManager(); + Template template = templatemanager.getTemplate(minecraftserver, new ResourceLocation(Reference.MOD_ID+":easter_egg_2")); + if(template == null||ModConfig.worldgen.structures.EasterEgg==false) + return false; + Biome biome = world.getBiomeForCoordsBody(position); + if(rand.nextInt(ModConfig.worldgen.structures.EasterEggChance) == 0){ + IBlockState iblockstate = world.getBlockState(position); + world.notifyBlockUpdate(position, iblockstate, iblockstate, 3); + PlacementSettings placementsettings = (new PlacementSettings()).setMirror(Mirror.NONE) + .setRotation(Rotation.NONE).setIgnoreEntities(false).setChunk((ChunkPos) null) + .setReplacedBlock((Block) null).setIgnoreStructureBlock(false); + template.getDataBlocks(position, placementsettings); + template.addBlocksToWorld(world, position.add(0, 0, 0), placementsettings); + return true; + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEggGen.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEggGen.java new file mode 100644 index 0000000..62767e3 --- /dev/null +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/EasterEggGen.java @@ -0,0 +1,52 @@ +package com.NetherNoah.ParadiseMod.world.worldgen.structures; + +import java.util.Random; + +import com.NetherNoah.ParadiseMod.Reference; +import com.NetherNoah.ParadiseMod.config.ModConfig; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.Mirror; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraft.world.gen.structure.template.PlacementSettings; +import net.minecraft.world.gen.structure.template.Template; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class EasterEggGen extends WorldGenerator { + @Override + public boolean generate(World world, Random rand, BlockPos position) { + WorldServer worldserver = (WorldServer) world; + MinecraftServer minecraftserver = world.getMinecraftServer(); + TemplateManager templatemanager = worldserver.getStructureTemplateManager(); + Template template = templatemanager.getTemplate(minecraftserver, new ResourceLocation(Reference.MOD_ID+":easter_egg_1")); + if(ModConfig.worldgen.structures.EasterEgg==false) + return false; + Biome biome = world.getBiomeForCoordsBody(position); + if(rand.nextInt(ModConfig.worldgen.structures.EasterEggChance) == 0){ + IBlockState iblockstate = world.getBlockState(position); + world.notifyBlockUpdate(position, iblockstate, iblockstate, 3); + PlacementSettings placementsettings = (new PlacementSettings()).setMirror(Mirror.NONE) + .setRotation(Rotation.NONE).setIgnoreEntities(false).setChunk((ChunkPos) null) + .setReplacedBlock((Block) null).setIgnoreStructureBlock(false); + template.getDataBlocks(position, placementsettings); + template.addBlocksToWorld(world, position.add(0, 0, 0), placementsettings); + return true; + } + return false; + } + public static boolean canSpawnHere(Template template, World world, BlockPos posAboveGround) + { + int zwidth = template.getSize().getZ(); + int xwidth = template.getSize().getX(); + return posAboveGround.getY() > 10; + } +} \ No newline at end of file diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/UndergroundVillage.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/UndergroundVillage.java new file mode 100644 index 0000000..7fe8116 --- /dev/null +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/UndergroundVillage.java @@ -0,0 +1,34 @@ +package com.NetherNoah.ParadiseMod.world.worldgen.structures; + +import java.util.Random; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.fml.common.IWorldGenerator; + +public class UndergroundVillage extends WorldGenerator implements IWorldGenerator{ + + @Override + public void generate(Random rand, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, + IChunkProvider chunkProvider) { + int blockX = chunkX * 16; + int blockZ = chunkZ * 16; + if (world.provider.getDimension() == 0) + generateOverworld(world, rand, blockX + 8, blockZ + 8); + } + + private void generateOverworld(World world, Random rand, int blockX, int blockZ) + { + BlockPos pos = new BlockPos(blockX, 20, blockZ); + WorldGenerator structure = new UndergroundVillageGen(); + structure.generate(world, rand, pos); + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) { + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/UndergroundVillageGen.java b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/UndergroundVillageGen.java new file mode 100644 index 0000000..013347f --- /dev/null +++ b/src/main/java/com/NetherNoah/ParadiseMod/world/worldgen/structures/UndergroundVillageGen.java @@ -0,0 +1,49 @@ +package com.NetherNoah.ParadiseMod.world.worldgen.structures; + +import java.util.Random; + +import com.NetherNoah.ParadiseMod.Reference; +import com.NetherNoah.ParadiseMod.config.ModConfig; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.Mirror; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraft.world.gen.structure.template.PlacementSettings; +import net.minecraft.world.gen.structure.template.Template; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class UndergroundVillageGen extends WorldGenerator { + @Override + public boolean generate(World world, Random rand, BlockPos position) { + WorldServer worldserver = (WorldServer) world; + MinecraftServer minecraftserver = world.getMinecraftServer(); + TemplateManager templatemanager = worldserver.getStructureTemplateManager(); + Template template = templatemanager.getTemplate(minecraftserver, new ResourceLocation(Reference.MOD_ID+":underground_village")); + Template filler = templatemanager.getTemplate(minecraftserver, new ResourceLocation(Reference.MOD_ID+":filler")); + if(template == null||ModConfig.worldgen.structures.UndergroundVillage==false) + return false; + Biome biome = world.getBiomeForCoordsBody(position); + if(rand.nextInt(ModConfig.worldgen.structures.UndergroundVillageChance) == 0){ + IBlockState iblockstate = world.getBlockState(position); + world.notifyBlockUpdate(position, iblockstate, iblockstate, 3); + PlacementSettings placementsettings = (new PlacementSettings()).setMirror(Mirror.NONE) + .setRotation(Rotation.NONE).setIgnoreEntities(false).setChunk((ChunkPos) null) + .setReplacedBlock((Block) null).setIgnoreStructureBlock(false); + filler.getDataBlocks(position, placementsettings); + filler.addBlocksToWorld(world, position.add(0, 0, 0), placementsettings,0); + template.getDataBlocks(position, placementsettings); + template.addBlocksToWorld(world, position.add(0, 0, 0), placementsettings,0); + return true; + } + return false; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/nnparadisemod/lang/en_US.lang b/src/main/resources/assets/nnparadisemod/lang/en_US.lang index 948e929..53341fd 100644 --- a/src/main/resources/assets/nnparadisemod/lang/en_US.lang +++ b/src/main/resources/assets/nnparadisemod/lang/en_US.lang @@ -299,6 +299,10 @@ tile.VoidPearlOre.name=Void Pearl Ore fluid.liquid_redstone=Liquid Redstone #Config +config.cavetypes=Cave Types +config.caves=Better Caves +config.crystalchance=Crystal Chance +config.bettercaves=Beautify Caves config.worldgen=World Generation config.dimensions=Dimensions config.structures=Structures @@ -323,7 +327,9 @@ config.mesatemples=Mesa Temples config.minerbase=Abandoned Miner Bases config.ministronghold=Mini Strongholds config.shipwreck=Shipwrecks +config.easteregg=Easter Egg config.oceanvillages=Underwater Villages +config.undergroundvillages=Underground Villages config.portal=Rogue Portals config.runways=Elytra Runways config.skywheels=Wheels in the Sky diff --git a/src/main/resources/assets/nnparadisemod/structures/easter_egg_1.nbt b/src/main/resources/assets/nnparadisemod/structures/easter_egg_1.nbt new file mode 100644 index 0000000000000000000000000000000000000000..7cf818dc29b96d69fca645117ffbb4a5b7c20d92 GIT binary patch literal 4309 zcmdT{dsNfs872vrA_Ax43N%3eu*E|`63Gy#1?vwFLIDZsQo>k3!6=t-mv*cr z$aX{%F2a;13MkA4jOAiNH^Vs)5;x=$Fo7?>k?9 z-}k)F`#jJ4fvSDY!Su%vkJWy3y!`RT@_g`oP%*|wTDLsp66@?ZyW5$tevJQRQE+Ek zl=zd>Gq>Ie-Ep3+P& zEw0wmdN?zEip8%e6+@i&*sbYZg>3=zhV{Yo_w)}*`U$B@{rPm!m~2(N8P>Y-MKP8j zdFF$VM*8e0QpI#fCiiTD$RkB3*Y#%HK06lG+Q@@}Ie`3F8(sq9+PGWTOl0=)E?(?bDC`kb25 zFCdZM#)K1=rlb)>`J3-tC5OYOHXS6wyq;DBdh#C1CFGN8LbK*PG4`2@Cx4w)MRkmdy*Ks&(4B>iA z^7PbI?o(=GTD+Lf(48i_@jd9#7#I8%=y#XP<}a5))eT3&;skVta6KHWkiYRwM;LSr z*RL`PPKGaq@EiP}r~DyJRM>owTyk@17k&@_3^(qaON>{82+l$fJ^3(tJ0@Xk0sA56 zg1ftq3;8iMWp=wSe-{-y&i0>_oA+n&|Eeq} zEp6%$zuT^X= z#!AXnTM85}!jQk#Y$ zlonUa>z6i*4Vp=zkk+G@%XK3?l5~TV#wpd-GqXmT@~CRyvfPU$`+y62v&9R3xBG)Fhce6Um(#wHBM??IoL;#OA;|9> z2s4@sLY^Br2_i=T2di`52a)@O$XPBRat}M?uiGK70+2^%fi%^f3pCzlqGHyd=Tu%7 z{IZi4_L8>V?DT~f3`&r-Dw4Y(1At9&uTs%gx~+YbAfcbzNMON0d=KpKd4TvtAhXdf zAU@e^AQ>%oZN!3P9E*aC3~VE_zylwHyL z!J=imfuei=a^NUB(_+&PwwsC(HjgnkxQ#!#lx%hMP{Tp9g9#y%Cw&p-ji|gps28TP zWLp_(+`C@Zwvn|xzeV3DOhjkCw7y(ag#)Z#Vu#BCz@_%HGmsZZ0@)cLVRktQOd;fI z61e%%aPe^{dCcKbx049D(i%y&X1L#`1XdH#D$uLk?nlb>|SqQ5(<)Uh%#7qOk&uAr6!=Yx-!ko>Y?|)*IZ!310VTl~%s-%iM z+GK5@IgczLc|w$K-Fdv^O=KuhKn0ImNFsEPo)m1#1YCb6B5TUM+@2%Q0(ZUD}I#E-A2w*M;V6MQ9xd4DUc~m8! z)#&4PdE^LyQMZ73bZCeb^T@ZZpvq0w{ z3!FS@9s#^_tnEjb9YGJp&!fR=DP#`e^tY9)VcrX z8pfM)y9U~NP^h-qt%$a@@`_@OMp=-nnh@U}+oZ@*o_*)F^Y2CLFBbPpGFsWWs)2#q z+JPF7qgZ^a?J5gG)EoJBy>$g2=+wp~*p>ma|EwpZZvA$j?E? zYb`2t-q3b@bi2L{*Ui;W=xXYxm69^e&bOKu883Erlqi%WHXYYJH_l?m*Q04F{l?9q zoyk>|ennNR40yz;c)l)H>1t|{^EB9p0~L(}WjpBlcvPsNv~WnfJvN~l%aauJEM<0; Y>;70XZ&9Rg@RdjJ3c literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/nnparadisemod/structures/easter_egg_2.nbt b/src/main/resources/assets/nnparadisemod/structures/easter_egg_2.nbt new file mode 100644 index 0000000000000000000000000000000000000000..900625ad29395542e00a975f6a565a8efe070a9a GIT binary patch literal 8964 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/nnparadisemod/structures/filler.nbt b/src/main/resources/assets/nnparadisemod/structures/filler.nbt new file mode 100644 index 0000000000000000000000000000000000000000..0659da2566f19fd0ad0f9c12e00a0dfd74ea35fe GIT binary patch literal 24216 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index cae0f34..27d44fe 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "nnparadisemod", "name": "Nether Noah's Paradise Mod", "description": "This Mod adds stuff that makes minecraft better!\nBest if used alongside Quark!", - "version": "1.2.2", + "version": "1.3 (The Cave Update)", "logoFile": "assets/nnparadisemod/textures/nnparadisemod.png", "url": "https://github.com/NoahJelen/nnparadisemod/tree/1.12.2", "updateUrl": "",