From a4de418b3880b45236c04b0b76d3760bd90a7b2e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 7 Jul 2016 06:59:05 +0200 Subject: [PATCH 01/34] r49! --- build.gradle | 2 +- update/changelog.md | 4 ++++ update/updateVersions.properties | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 58cdfc4e5..17dd5397b 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.10.2-r48" +version = "1.10.2-r49" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index a245eb03c..5d2993225 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,7 @@ +# 1.10.2-r49 +* Fixed a dube bug that caused the reconstructor to create about a thousand bajillion more items and blocks than it should. +* Yea. I'm pretty great. >_< + # 1.10.2-r48 * Added Shock Suppressor, a block that will cause explosions not to happen * Added Phantom Placer Siding rule button diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 40abbbc11..c96661e33 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -3,4 +3,4 @@ 1.9=33 1.9.4=45 1.10=46 -1.10.2=48 \ No newline at end of file +1.10.2=49 \ No newline at end of file From aae29bbfdcb6682731fd8d37721ce23df930185b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 7 Jul 2016 07:19:44 +0200 Subject: [PATCH 02/34] Apparently "Coffee Machine" is just a bad englishization from german. --- .../assets/actuallyadditions/lang/en_US.lang | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 5dc0d2cce..1694ab5ce 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -84,7 +84,7 @@ container.nei.actuallyadditions.compost.name=Compost container.nei.actuallyadditions.furnaceDouble.name=Double Furnace container.nei.actuallyadditions.treasureChest.name=Treasure Chest container.nei.actuallyadditions.treasureChest.info=Items at -container.nei.actuallyadditions.coffee.name=Coffee Machine +container.nei.actuallyadditions.coffee.name=Coffee Maker container.nei.actuallyadditions.coffee.special=Special Feature container.nei.actuallyadditions.coffee.maxAmount=Max Amount container.nei.actuallyadditions.coffee.extra.milk=+01:00, -1 Level @@ -178,7 +178,7 @@ tile.actuallyadditions.blockPlacer.name=Auto-Placer tile.actuallyadditions.blockDropper.name=Automatic Precision Dropper tile.actuallyadditions.blockMiscEnderCasing.name=Ender Casing tile.actuallyadditions.blockFlax.name=Flax Plant -tile.actuallyadditions.blockCoffeeMachine.name=Coffee Machine +tile.actuallyadditions.blockCoffeeMachine.name=Coffee Maker tile.actuallyadditions.blockXPSolidifier.name=Experience Solidifier tile.actuallyadditions.blockSmileyCloud.name=Smiley Cloud tile.actuallyadditions.blockLeafGenerator.name=Leaf-Eating Generator @@ -590,7 +590,7 @@ container.actuallyadditions.liquiface.name=Liquiface container.actuallyadditions.energyface.name=Energyface container.actuallyadditions.fluidPlacer.name=Fluid Placer container.actuallyadditions.fluidCollector.name=Fluid Collector -container.actuallyadditions.coffeeMachine.name=Coffee Machine +container.actuallyadditions.coffeeMachine.name=Coffee Maker container.actuallyadditions.drill.name=Drill container.actuallyadditions.energizer.name=Energizer container.actuallyadditions.enervator.name=Enervator @@ -647,7 +647,7 @@ achievement.actuallyadditions.pickUpCoffee=Makes you addicted achievement.actuallyadditions.pickUpCoffee.desc=Harvest some coffee achievement.actuallyadditions.craftCoffeeMachine=Addiction in cups -achievement.actuallyadditions.craftCoffeeMachine.desc=Craft a Coffee Machine +achievement.actuallyadditions.craftCoffeeMachine.desc=Craft a Coffee Maker achievement.actuallyadditions.obscured=§ksome chieve name achievement.actuallyadditions.obscured.desc=§klolwut y u actually look over meow @@ -747,8 +747,8 @@ booklet.actuallyadditions.chapter.crate.text.1=Storage Crates are big. booklet.actuallyadditions.chapter.crate.text.4=Placing a Storage Crate Keeper inside the Storage Crate before breaking it will cause it to keep all of its items, however the Keeper will be destroyed upon placing the Crate back down. booklet.actuallyadditions.chapter.crate.text.5=The Chest To Storage Crate Upgrade allows you to convert any chest into a Storage Crate, retaining its items! Just shift-right-click onto the chest to apply it. -booklet.actuallyadditions.chapter.coffeeMachine.name=Coffee Machine -booklet.actuallyadditions.chapter.coffeeMachine.text.1=The Coffee Machine is a block used to make Coffee, a potion-like item that gives the user several buffs. To use the coffee machine, you need a Empty Cup, Coffee Beans, which can be found in the wild, harvested and planted on farmland again, RF/t and mB of Water per cup brewed. On the coffee machine recipe pages at the back, to see what the item does, just hover over the Cup of Coffee. +booklet.actuallyadditions.chapter.coffeeMachine.name=Coffee Maker +booklet.actuallyadditions.chapter.coffeeMachine.text.1=The Coffee Maker is a block used to make Coffee, a potion-like item that gives the user several buffs. To use the coffee maker, you need a Empty Cup, Coffee Beans, which can be found in the wild, harvested and planted on farmland again, RF/t and mB of Water per cup brewed. On the coffee maker recipe pages at the back, to see what the item does, just hover over the Cup of Coffee. booklet.actuallyadditions.chapter.coffeeMachine.text.2=To actually give your coffee some buffs, put some of the items shown on the later pages into the slots on the right. The more slots are filled up with one item, the higher the Amplifier of the effect will be. The Maximum Amplifier is the max amount of items to be put into one coffee. Order matters: When using, for example, Milk (to see what it does exactly, go to a later page), you are going to have to plan the items out inside the numbered slots in such a way that it brews the coffee you want. booklet.actuallyadditions.chapter.coffeeMachine.text.3=This is an example of a recipe making a coffee containing Fire Resistance 1 for 0:20 and Speed 1 for 2:30. booklet.actuallyadditions.chapter.coffeeMachine.text.6=Milk is an important item when brewing coffee: It adds 2 minutes to all effects of items in slots with lower numbers while removing 1 amplifier. When the amplifier of an effect is 1, however, it will remove the effect. From 346dbf2ccd68e698e0b9ac7b658cf92d0ed6159f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 7 Jul 2016 17:59:45 +0200 Subject: [PATCH 03/34] Cleanup! --- .../mod/blocks/BlockAtomicReconstructor.java | 5 +- .../mod/blocks/BlockGiantChest.java | 9 +- .../mod/blocks/BlockShockSuppressor.java | 2 - .../mod/booklet/GuiBooklet.java | 2 +- .../mod/booklet/GuiBookletStand.java | 3 +- .../mod/config/ConfigurationHandler.java | 1 - .../mod/event/CommonEvents.java | 24 ++-- .../mod/gen/WorldGenLushCaves.java | 4 - .../mod/items/ItemDrill.java | 2 +- .../mod/items/ItemSolidifiedExperience.java | 3 - .../mod/items/ItemSpawnerChanger.java | 1 - .../mod/items/ItemWingsOfTheBats.java | 107 +++++++++--------- .../mod/items/base/ItemFoodSeed.java | 2 - .../mod/items/lens/LensDisruption.java | 18 ++- .../mod/jei/crusher/CrusherRecipeHandler.java | 1 - .../mod/misc/special/SpecialRenderInit.java | 1 - .../mod/tile/TileEntityBase.java | 3 +- .../mod/tile/TileEntityFishingNet.java | 1 - .../mod/tile/TileEntityFluidCollector.java | 2 +- .../mod/tile/TileEntityInventoryBase.java | 2 - .../mod/tile/TileEntityLaserRelayEnergy.java | 1 - .../mod/tile/TileEntityPhantomPlacer.java | 2 +- .../mod/tile/TileEntityPlayerInterface.java | 2 +- .../actuallyadditions/mod/util/Util.java | 1 - 24 files changed, 97 insertions(+), 102 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index 26b623ba7..d4bb8d942 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -15,7 +15,10 @@ import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; -import de.ellpeck.actuallyadditions.mod.util.*; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.SoundType; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index a2f76b152..c7633dc74 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -58,9 +58,12 @@ public class BlockGiantChest extends BlockContainerBase{ @Override public TileEntity createNewTileEntity(World world, int par2){ switch(this.type){ - case 1: return new TileEntityGiantChestMedium(); - case 2: return new TileEntityGiantChestLarge(); - default: return new TileEntityGiantChest(); + case 1: + return new TileEntityGiantChestMedium(); + case 2: + return new TileEntityGiantChestLarge(); + default: + return new TileEntityGiantChest(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockShockSuppressor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockShockSuppressor.java index ced0857cb..518cc57e6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockShockSuppressor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockShockSuppressor.java @@ -12,10 +12,8 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityShockSuppressor; -import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 9a04aae48..4ede3c0ea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -91,10 +91,10 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public GuiButton buttonViewOnline; public GuiTextField searchField; public boolean shouldSaveDataNextClose; + public String bookletName; private int ticksElapsed; private boolean mousePressed; private int hisNameIsAt; - public String bookletName; public GuiBooklet(GuiScreen parentScreen, boolean tryOpenMainPage, boolean saveOnClose){ this.xSize = 146; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java index c5513f546..4750162a9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java @@ -24,9 +24,8 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiBookletStand extends GuiBooklet{ - private GuiButton buttonSetPage; - private final TileEntityBookletStand theStand; + private GuiButton buttonSetPage; public GuiBookletStand(TileEntityBase theStand){ super(null, false, false); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java index 2a7ee7047..553a5362c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.config; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.fml.client.event.ConfigChangedEvent; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java index 603ffe403..e9e7f431b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java @@ -44,6 +44,18 @@ public class CommonEvents{ MinecraftForge.EVENT_BUS.register(this); } + public static void checkAchievements(ItemStack gotten, EntityPlayer player, InitAchievements.Type type){ + for(TheAchievements ach : TheAchievements.values()){ + if(ach.type == type){ + if(gotten != null && ach.chieve.theItemStack != null && gotten.getItem() == ach.chieve.theItemStack.getItem()){ + if(gotten.getItemDamage() == ach.chieve.theItemStack.getItemDamage()){ + player.addStat(ach.chieve, 1); + } + } + } + } + } + @SubscribeEvent public void livingDeathEvent(LivingDeathEvent event){ if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getEntityLiving() instanceof EntityPlayer){ @@ -90,18 +102,6 @@ public class CommonEvents{ } } - public static void checkAchievements(ItemStack gotten, EntityPlayer player, InitAchievements.Type type){ - for(TheAchievements ach : TheAchievements.values()){ - if(ach.type == type){ - if(gotten != null && ach.chieve.theItemStack != null && gotten.getItem() == ach.chieve.theItemStack.getItem()){ - if(gotten.getItemDamage() == ach.chieve.theItemStack.getItemDamage()){ - player.addStat(ach.chieve, 1); - } - } - } - } - } - @SubscribeEvent public void onCraftedEvent(PlayerEvent.ItemCraftedEvent event){ checkAchievements(event.crafting, event.player, InitAchievements.Type.CRAFTING); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java index 4b1dba16c..644eab14b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java @@ -12,10 +12,6 @@ package de.ellpeck.actuallyadditions.mod.gen; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.EnumDyeColor; -import net.minecraft.item.ItemDye; -import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.gen.feature.*; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index cbd84c59b..3f8397c1b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -54,8 +54,8 @@ import java.util.Set; public class ItemDrill extends ItemEnergy{ - private static final int ENERGY_USE = 100; public static final int HARVEST_LEVEL = 4; + private static final int ENERGY_USE = 100; public ItemDrill(String name){ super(500000, 5000, name); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java index 05afa683f..cf6a2b2b1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java @@ -10,14 +10,11 @@ package de.ellpeck.actuallyadditions.mod.items; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.item.EntityXPOrb; -import net.minecraft.entity.monster.EntitySpider; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index 79f56ebb3..f2d9774ac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java index 0fb8f9c4c..2dbf74d2b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java @@ -14,17 +14,13 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.Util; -import net.minecraft.entity.EntityCreature; -import net.minecraft.entity.monster.EntitySpider; import net.minecraft.entity.passive.EntityBat; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent; @@ -51,6 +47,57 @@ public class ItemWingsOfTheBats extends ItemBase{ MinecraftForge.EVENT_BUS.register(this); } + /** + * Checks if the Player is winged + * + * @param player The Player + * @return Winged? + */ + public static boolean isPlayerWinged(EntityPlayer player){ + return WINGED_PLAYERS.contains(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : "")); + } + + /** + * Same as above, but Remote Checking is done automatically + */ + public static void removeWingsFromPlayer(EntityPlayer player){ + removeWingsFromPlayer(player, player.worldObj.isRemote); + } + + /** + * Removes the Player from the List of Players that have Wings + * + * @param player The Player + * @param worldRemote If the World the Player is in is remote + */ + public static void removeWingsFromPlayer(EntityPlayer player, boolean worldRemote){ + WINGED_PLAYERS.remove(player.getUniqueID()+(worldRemote ? "-Remote" : "")); + } + + /** + * Adds the Player to the List of Players that have Wings + * + * @param player The Player + */ + public static void addWingsToPlayer(EntityPlayer player){ + WINGED_PLAYERS.add(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : "")); + } + + /** + * Checks if the Player has Wings in its Inventory + * + * @param player The Player + * @return The Wings + */ + public static ItemStack getWingItem(EntityPlayer player){ + for(int i = 0; i < player.inventory.getSizeInventory(); i++){ + if(player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() instanceof ItemWingsOfTheBats){ + return player.inventory.getStackInSlot(i); + } + } + return null; + } + @SubscribeEvent public void onLogOutEvent(PlayerEvent.PlayerLoggedOutEvent event){ //Remove Player from Wings' Fly Permission List @@ -104,58 +151,6 @@ public class ItemWingsOfTheBats extends ItemBase{ } } - /** - * Checks if the Player is winged - * - * @param player The Player - * @return Winged? - */ - public static boolean isPlayerWinged(EntityPlayer player){ - return WINGED_PLAYERS.contains(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : "")); - } - - /** - * Same as above, but Remote Checking is done automatically - */ - public static void removeWingsFromPlayer(EntityPlayer player){ - removeWingsFromPlayer(player, player.worldObj.isRemote); - } - - /** - * Removes the Player from the List of Players that have Wings - * - * @param player The Player - * @param worldRemote If the World the Player is in is remote - */ - public static void removeWingsFromPlayer(EntityPlayer player, boolean worldRemote){ - WINGED_PLAYERS.remove(player.getUniqueID()+(worldRemote ? "-Remote" : "")); - } - - /** - * Adds the Player to the List of Players that have Wings - * - * @param player The Player - */ - public static void addWingsToPlayer(EntityPlayer player){ - WINGED_PLAYERS.add(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : "")); - } - - /** - * Checks if the Player has Wings in its Inventory - * - * @param player The Player - * @return The Wings - */ - public static ItemStack getWingItem(EntityPlayer player){ - for(int i = 0; i < player.inventory.getSizeInventory(); i++){ - if(player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() instanceof ItemWingsOfTheBats){ - return player.inventory.getStackInSlot(i); - } - } - return null; - } - - @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodSeed.java index f6a279443..60b528830 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodSeed.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -23,7 +22,6 @@ import net.minecraft.item.ItemSeedFood; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; public class ItemFoodSeed extends ItemSeedFood{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java index b98f212e4..034fd1048 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -39,14 +40,29 @@ public class LensDisruption extends Lens{ if(!stack.hasTagCompound() || !stack.getTagCompound().getBoolean(ModUtil.MOD_ID+"DisruptedAlready")){ ItemStack newStack = null; - while(newStack == null || newStack.getItem() == null){ + boolean done = false; + while(!done){ if(Util.RANDOM.nextBoolean()){ newStack = new ItemStack(Item.REGISTRY.getRandomObject(Util.RANDOM)); } else{ newStack = new ItemStack(Block.REGISTRY.getRandomObject(Util.RANDOM)); } + + if(newStack != null){ + Item newItem = newStack.getItem(); + if(newItem != null){ + CreativeTabs[] tabs = newItem.getCreativeTabs(); + for(CreativeTabs tab : tabs){ + if(tab != null){ + done = true; + break; + } + } + } + } } + newStack.stackSize = stack.stackSize; if(!newStack.hasTagCompound()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java index 3d1b3032c..aa32e0fdf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.jei.crusher; import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; -import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index 810f44ab9..f04ca929d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.misc.special; -import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 22a3c12af..541825031 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import net.minecraft.block.state.IBlockState; @@ -41,10 +40,10 @@ import net.minecraftforge.fml.common.registry.GameRegistry; public abstract class TileEntityBase extends TileEntity implements ITickable{ public static boolean teslaLoaded; + public final String name; public boolean isRedstonePowered; public boolean isPulseMode; protected int ticksElapsed; - public final String name; public TileEntityBase(String name){ this.name = name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java index 53b876796..d04b0fe74 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 7a5c5f80e..cd3ad9e2f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -27,6 +27,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityFluidCollector extends TileEntityBase implements net.minecraftforge.fluids.IFluidHandler{ + public boolean isPlacer; public final FluidTank tank = new FluidTank(8*Util.BUCKET){ @Override public boolean canFill(){ @@ -38,7 +39,6 @@ public class TileEntityFluidCollector extends TileEntityBase implements net.mine return !TileEntityFluidCollector.this.isPlacer; } }; - public boolean isPlacer; private int lastTankAmount; private int currentTime; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index a47733d38..10cdaaa3c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -16,8 +16,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumFacing; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.wrapper.SidedInvWrapper; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index 76faac6cf..59face492 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 350161067..88fd6c1b6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -36,8 +36,8 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements public int currentTime; public int range; public boolean isBreaker; - private int oldRange; public int side; + private int oldRange; public TileEntityPhantomPlacer(int slots, String name){ super(slots, name); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java index f69d5b734..96d246e56 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java @@ -23,8 +23,8 @@ import java.util.UUID; public class TileEntityPlayerInterface extends TileEntityInventoryBase implements IEnergyReceiver, IEnergyDisplay{ public static final int DEFAULT_RANGE = 32; - public UUID connectedPlayer; private final EnergyStorage storage = new EnergyStorage(30000); + public UUID connectedPlayer; private int oldEnergy; private int range; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index 39e04a976..b3ee9d920 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.util; import net.minecraft.item.EnumRarity; import net.minecraft.util.text.TextFormatting; -import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.oredict.OreDictionary; From bdc6f179cfbe124760370fcbd456f19f9465faba Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 7 Jul 2016 20:17:09 +0200 Subject: [PATCH 04/34] Fixed the drill sometimes acting up on redstone or glowstone --- .../actuallyadditions/mod/items/ItemDrill.java | 3 +-- .../actuallyadditions/mod/util/WorldUtil.java | 12 +----------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 3f8397c1b..857d0b4d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -268,9 +268,8 @@ public class ItemDrill extends ItemEnergy{ @Override public boolean canHarvestBlock(IBlockState state, ItemStack stack){ - int harvestLevel = this.getHarvestLevel(stack, ""); Block block = state.getBlock(); - return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial(state).isToolNotRequired() || (block == Blocks.SNOW_LAYER || block == Blocks.SNOW || (block == Blocks.OBSIDIAN ? harvestLevel >= 3 : (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE ? (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK ? (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE ? (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE ? (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE ? (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE ? (block.getMaterial(state) == Material.ROCK || (block.getMaterial(state) == Material.IRON || block.getMaterial(state) == Material.ANVIL)) : harvestLevel >= 2) : harvestLevel >= 1) : harvestLevel >= 1) : harvestLevel >= 2) : harvestLevel >= 2) : harvestLevel >= 2)))); + return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial(state).isToolNotRequired() || (block == Blocks.SNOW_LAYER || block == Blocks.SNOW || (block == Blocks.OBSIDIAN ? HARVEST_LEVEL >= 3 : (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE ? (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK ? (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE ? (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE ? (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE ? (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE ? (block.getMaterial(state) == Material.ROCK || (block.getMaterial(state) == Material.IRON || block.getMaterial(state) == Material.ANVIL)) : HARVEST_LEVEL >= 2) : HARVEST_LEVEL >= 1) : HARVEST_LEVEL >= 1) : HARVEST_LEVEL >= 2) : HARVEST_LEVEL >= 2) : HARVEST_LEVEL >= 2)))); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 974f81422..d0d11743e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -341,6 +341,7 @@ public final class WorldUtil{ //Cobbled together from Tinkers' Construct (with permission, thanks!) and PlayerInteractionManager code. //Breaking blocks is a hideous pain so yea. + //This doesn't do any additional harvestability checks that the blocks itself don't do! public static boolean playerHarvestBlock(ItemStack stack, World world, EntityPlayer player, BlockPos pos){ if(world.isAirBlock(pos)){ return false; @@ -349,17 +350,6 @@ public final class WorldUtil{ IBlockState state = world.getBlockState(pos); Block block = state.getBlock(); - boolean effective = false; - for(String type : stack.getItem().getToolClasses(stack)){ - if(block.isToolEffective(type, state)){ - effective = true; - } - } - - if(!effective || !ForgeHooks.canHarvestBlock(block, player, world, pos)){ - return false; - } - if(player.capabilities.isCreativeMode){ block.onBlockHarvested(world, pos, state, player); if(block.removedByPlayer(state, world, pos, player, false)){ From 589d94894ec960b0ce0c6462f08dd5933522882f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 8 Jul 2016 13:59:28 +0200 Subject: [PATCH 05/34] InvTweaks pls Closes #145 --- .../mod/inventory/gui/GuiGiantChest.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java index 769a80037..e556a286b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java @@ -62,14 +62,16 @@ public class GuiGiantChest extends GuiContainer{ @Override protected void actionPerformed(GuiButton button) throws IOException{ - NBTTagCompound compound = new NBTTagCompound(); - compound.setInteger("X", this.chest.getPos().getX()); - compound.setInteger("Y", this.chest.getPos().getY()); - compound.setInteger("Z", this.chest.getPos().getZ()); - compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); - compound.setInteger("WorldID", this.chest.getWorld().provider.getDimension()); - compound.setInteger("ButtonID", button.id); - PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); + if(button.id >= 0 && button.id < 3){ + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.chest.getPos().getX()); + compound.setInteger("Y", this.chest.getPos().getY()); + compound.setInteger("Z", this.chest.getPos().getZ()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("WorldID", this.chest.getWorld().provider.getDimension()); + compound.setInteger("ButtonID", button.id); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); + } } @Override From b4decddd4b7dbab39a706d22b4e5014f9679aaf3 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 8 Jul 2016 14:29:12 +0200 Subject: [PATCH 06/34] TiCon tools lose their broken tag when repairing them in an item repairer Closes #142 --- .../mod/tile/TileEntityItemRepairer.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index 4b9c8fb5c..496af3794 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -77,9 +77,10 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(this.slots[SLOT_OUTPUT] == null && canBeRepaired(this.slots[SLOT_INPUT])){ - if(this.slots[SLOT_INPUT].getItemDamage() <= 0){ - this.slots[SLOT_OUTPUT] = this.slots[SLOT_INPUT].copy(); + ItemStack input = this.slots[SLOT_INPUT]; + if(this.slots[SLOT_OUTPUT] == null && canBeRepaired(input)){ + if(input.getItemDamage() <= 0){ + this.slots[SLOT_OUTPUT] = input.copy(); this.slots[SLOT_INPUT] = null; this.nextRepairTick = 0; } @@ -89,7 +90,15 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I this.storage.extractEnergy(ENERGY_USE, false); if(this.nextRepairTick >= 2){ this.nextRepairTick = 0; - this.slots[SLOT_INPUT].setItemDamage(this.slots[SLOT_INPUT].getItemDamage()-1); + input.setItemDamage(input.getItemDamage()-1); + + if(input.hasTagCompound()){ + //TiCon un-break tools + if("tconstruct".equalsIgnoreCase(input.getItem().getRegistryName().getResourceDomain())){ + NBTTagCompound stats = input.getTagCompound().getCompoundTag("Stats"); + stats.removeTag("Broken"); + } + } } } } From 01909c978754e65b7504693d2a7738deab02be5d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 8 Jul 2016 17:40:47 +0200 Subject: [PATCH 07/34] Solid XP drop config --- .../mod/config/values/ConfigBoolValues.java | 1 + .../mod/items/ItemSolidifiedExperience.java | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index f0f2f6798..a534d230c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -37,6 +37,7 @@ public enum ConfigBoolValues{ DO_SPIDER_DROPS("Spider Cobweb Drop", ConfigCategories.MOB_DROPS, true, "If Cobwebs should sometimes drop from Spiders"), DO_BAT_DROPS("Bat Wing Drop", ConfigCategories.MOB_DROPS, true, "If Wings should sometimes drop from Bats"), + DO_XP_DROPS("Solidified XP Drop", ConfigCategories.MOB_DROPS, true, "If Mobs should randomly drop solidified XP occasionally"), CTRL_EXTRA_INFO("Advanced Info", ConfigCategories.OTHER, true, "Show Advanced Item Info when holding Control on every Item"), CTRL_INFO_FOR_EXTRA_INFO("Advanced Info Tooltips", ConfigCategories.OTHER, true, "Show the 'Press Control for more Info'-Text on Item Tooltips"), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java index cf6a2b2b1..a118c5a0d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.items; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.entity.EntityCreature; @@ -37,11 +38,13 @@ public class ItemSolidifiedExperience extends ItemBase{ @SubscribeEvent public void onEntityDropEvent(LivingDropsEvent event){ - if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getSource().getEntity() instanceof EntityPlayer){ - //Drop Solidified XP - if(event.getEntityLiving() instanceof EntityCreature){ - if(Util.RANDOM.nextInt(10) <= event.getLootingLevel()*2){ - event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); + if(ConfigBoolValues.DO_XP_DROPS.isEnabled()){ + if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getSource().getEntity() instanceof EntityPlayer){ + //Drop Solidified XP + if(event.getEntityLiving() instanceof EntityCreature){ + if(Util.RANDOM.nextInt(10) <= event.getLootingLevel()*2){ + event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); + } } } } From 41a78d0399f391a2bcf84f6d09c4cbc9fa5563c7 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 8 Jul 2016 18:45:37 +0200 Subject: [PATCH 08/34] Why can this even happen..? --- .../ellpeck/actuallyadditions/mod/event/ClientEvents.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java index 1550e2a11..23c03fb91 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java @@ -136,7 +136,9 @@ public class ClientEvents{ if(stack != null){ if(stack.getItem() instanceof IHudDisplay){ profiler.startSection("ItemHudDisplay"); - ((IHudDisplay)stack.getItem()).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); + if(minecraft.theWorld != null){ + ((IHudDisplay)stack.getItem()).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); + } profiler.endSection(); } } @@ -147,7 +149,9 @@ public class ClientEvents{ if(blockHit instanceof IHudDisplay){ profiler.startSection("BlockHudDisplay"); - ((IHudDisplay)blockHit).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); + if(minecraft.theWorld != null){ + ((IHudDisplay)blockHit).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); + } profiler.endSection(); } From a315acc50d8aec5a3284802ae9d8473a714dcaf6 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 8 Jul 2016 19:08:54 +0200 Subject: [PATCH 09/34] Fixed a bug with the game sometimes crashing when looking at a block with the manual in hand This should actually fix it. --- .../ellpeck/actuallyadditions/mod/event/ClientEvents.java | 8 ++------ .../ellpeck/actuallyadditions/mod/items/ItemBooklet.java | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java index 23c03fb91..1550e2a11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java @@ -136,9 +136,7 @@ public class ClientEvents{ if(stack != null){ if(stack.getItem() instanceof IHudDisplay){ profiler.startSection("ItemHudDisplay"); - if(minecraft.theWorld != null){ - ((IHudDisplay)stack.getItem()).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); - } + ((IHudDisplay)stack.getItem()).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); profiler.endSection(); } } @@ -149,9 +147,7 @@ public class ClientEvents{ if(blockHit instanceof IHudDisplay){ profiler.startSection("BlockHudDisplay"); - if(minecraft.theWorld != null){ - ((IHudDisplay)blockHit).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); - } + ((IHudDisplay)blockHit).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); profiler.endSection(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index 9f7ad587e..6b2f70f4f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -98,7 +98,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ @Override public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ - if(posHit != null){ + if(posHit != null && posHit.getBlockPos() != null){ IBlockState state = minecraft.theWorld.getBlockState(posHit.getBlockPos()); Block block = state.getBlock(); if(block != null && !block.isAir(minecraft.theWorld.getBlockState(posHit.getBlockPos()), minecraft.theWorld, posHit.getBlockPos())){ From 02a58c5397fa3be6f5aa07900457af8014203799 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 9 Jul 2016 17:44:16 +0200 Subject: [PATCH 10/34] Creative tabs are client only. --- .../mod/items/lens/LensDisruption.java | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java index 034fd1048..a3ee4e3c0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java @@ -38,30 +38,17 @@ public class LensDisruption extends Lens{ ItemStack stack = item.getEntityItem(); if(!item.isDead && stack != null){ if(!stack.hasTagCompound() || !stack.getTagCompound().getBoolean(ModUtil.MOD_ID+"DisruptedAlready")){ - ItemStack newStack = null; - boolean done = false; - while(!done){ + ItemStack newStack; + do{ if(Util.RANDOM.nextBoolean()){ newStack = new ItemStack(Item.REGISTRY.getRandomObject(Util.RANDOM)); } else{ newStack = new ItemStack(Block.REGISTRY.getRandomObject(Util.RANDOM)); } - - if(newStack != null){ - Item newItem = newStack.getItem(); - if(newItem != null){ - CreativeTabs[] tabs = newItem.getCreativeTabs(); - for(CreativeTabs tab : tabs){ - if(tab != null){ - done = true; - break; - } - } - } - } } + while(newStack == null || newStack.getItem() == null); newStack.stackSize = stack.stackSize; From 91b398c12136ffc0d03acaf1a3be678d21b39de4 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 11 Jul 2016 17:24:26 +0200 Subject: [PATCH 11/34] Play the particles on the client when breaking the block directly with a drill --- .../de/ellpeck/actuallyadditions/mod/util/WorldUtil.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index d0d11743e..68e0bbad4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -357,7 +357,7 @@ public final class WorldUtil{ } if(!world.isRemote){ - world.playEvent(2001, pos, Block.getStateId(state)); + world.playEvent(player, 2001, pos, Block.getStateId(state)); if(player instanceof EntityPlayerMP){ ((EntityPlayerMP)player).connection.sendPacket(new SPacketBlockChange(world, pos)); @@ -385,7 +385,7 @@ public final class WorldUtil{ block.dropXpOnBlockBreak(world, pos, xp); } - world.playEvent(2001, pos, Block.getStateId(state)); + world.playEvent(player, 2001, pos, Block.getStateId(state)); playerMp.connection.sendPacket(new SPacketBlockChange(world, pos)); return true; } @@ -396,6 +396,7 @@ public final class WorldUtil{ } stack.onBlockDestroyed(world, state, pos, player); + world.playEvent(2001, pos, Block.getStateId(state)); if(stack.stackSize <= 0 && stack == player.getHeldItemMainhand()){ ForgeEventFactory.onPlayerDestroyItem(player, stack, EnumHand.MAIN_HAND); From 5e533600708011ab8d1a5e35ee2dfa0ad4ccb293 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 11 Jul 2016 17:28:36 +0200 Subject: [PATCH 12/34] Fixed drill, crafter and filter having an unlocalized name in the GUI --- .../actuallyadditions/mod/inventory/gui/GuiCrafter.java | 3 ++- .../ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java | 3 ++- .../ellpeck/actuallyadditions/mod/inventory/gui/GuiFilter.java | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java index b097bf05f..bba2473cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerCrafter; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; @@ -34,7 +35,7 @@ public class GuiCrafter extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, "container."+ModUtil.MOD_ID+".crafting"); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, StringUtil.localize("container."+ModUtil.MOD_ID+".crafting.name")); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java index 24cdb2e1c..4957a1f40 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerDrill; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; @@ -33,7 +34,7 @@ public class GuiDrill extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, "container."+ModUtil.MOD_ID+".drill"); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, StringUtil.localize("container."+ModUtil.MOD_ID+".drill.name")); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFilter.java index 398971903..25e86dce1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFilter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFilter.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; @@ -33,7 +34,7 @@ public class GuiFilter extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, "container."+ModUtil.MOD_ID+".filter"); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, StringUtil.localize("container."+ModUtil.MOD_ID+".filter.name")); } @Override From 58e24ad9f122c4f2078cb56c7e55643af9ac31e0 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 11 Jul 2016 17:41:35 +0200 Subject: [PATCH 13/34] r50! --- build.gradle | 2 +- update/changelog.md | 10 ++++++++++ update/updateVersions.properties | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 17dd5397b..948af4684 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.10.2-r49" +version = "1.10.2-r50" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index 5d2993225..fb9984d59 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,13 @@ +# 1.10.2-r50 +* Changed the name of the coffee machine to coffee maker because that's apparently a more proper name +* Fixed the drill sometimes acting up on redstone and glowstone +* Fixed the particles of breaking with the drill being delayed making it look weird +* Fixed a crash with the InvTweaks sorting buttons in a storage crate +* TiCon tools now lose their broken tag when repairing them with the item repairer +* Added a config option for Solid XP dropping +* Fixed a bug with the game sometimes crashing when looking at an entity with the booklet in hand +* Fixed Drill, Crafter and Filter having an unlocalized name in the GUIs + # 1.10.2-r49 * Fixed a dube bug that caused the reconstructor to create about a thousand bajillion more items and blocks than it should. * Yea. I'm pretty great. >_< diff --git a/update/updateVersions.properties b/update/updateVersions.properties index c96661e33..cb8cbadb2 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -3,4 +3,4 @@ 1.9=33 1.9.4=45 1.10=46 -1.10.2=49 \ No newline at end of file +1.10.2=50 \ No newline at end of file From d06b12e163f5a34a54e0ee9cc5d78820fcd53893 Mon Sep 17 00:00:00 2001 From: Glenthor Date: Mon, 11 Jul 2016 18:42:27 +0200 Subject: [PATCH 14/34] -Changed BioMass and BioCoal Texures --- .../textures/items/itemMiscBiocoal.png | Bin 413 -> 670 bytes .../textures/items/itemMiscBiomass.png | Bin 439 -> 660 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscBiocoal.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscBiocoal.png index e607c25141b35044548aa1d8cbc62b607c22527e..336081bcd7393def982429d8b937e7d5df926f7b 100644 GIT binary patch delta 625 zcmV-%0*?Ki1D*wtBo78+OGiWi{{a60|De66laVnPe+P6)O+^Rb2MZ7=HK=(b$^ZZY zD@jB_R5;7UlRIk`K^TRfnVp&4{cec_E5+WRASfgT;=L3>OMi!*h<``_fR{p2s91;~ zY9ThFph!^Tx8LsU%&9S zb|RByf5C%?_r+fgu3o#Iwm*Hqbsc^0m`2AK(j%&>Kh(Hdoz7=oo7y>_j%(1N{&kf5f ze+L-44nIUl34p%yltqs42?e0af?1f+G%Ybka$`_R&{$8~IEI+eSw<2GDHTPLqg2kN zJGXyvuyJ}beg5>36a&ury$Y`TQh zh8NGDi9b-@ueJ4!)GR7i4j#t4nx?LJ{pOW8asFa@x%Ei=vo-z%Bvub7J~VM;00000 LNkvXXu0mjfLh>RK delta 386 zcmV-|0e$|S1)T$sB!2{FK}|sb0I`n?{9y$E000SaNLh0L01m+b01m+cxRGn^0000O zbVXQnQ*UN;cVTj60B~VxZgehgWpp4kE-)@RY%_jN0003SNklZ(*y<@YvJ4?~~E+zy3 z-}f1S;h*0ejXxdgOg#qSlt_rg$53}+^XA#NOM|t?5S*1QCaCn3IERRN@|EI2+1eV~ z^JpiU0rr diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscBiomass.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscBiomass.png index e3519d42830c0abeb1fa5e2e4f1c271a031b744b..74740b44c717de782a0804b165ce7fdd67804c28 100644 GIT binary patch delta 615 zcmV-t0+{``1C#}jBo78+OGiWi{{a60|De66laVnPe+P6)O+^Rb2MZ7>9v$B6%K!iZ zAxT6*R5;7UlRIlvQ51#0^O|$#&f5gE&>|3sm4bzkPKc0Tp`cZ;Py|a`JMk|l{sFNt zja3jUOH0cjNCeR!J{TwSxO3;e&OH`46B7h0!CmbQYp=antPTIW#L?mYt@FO!tkEAP z?2l7~e-LzMj$Yf6%niXB=@j8TUQ(#+8c4YSlS zjdQ|41MsaMv;An@%SLFZTg5DO%*moS1E~60!C;ioYgrb10mdj?=^2a?-oEQs9;~mP z_Ty=_B!s}$6me28KJX>5n!IobQF%8v^~Tx~dcKroB>+YV#!*J;Aq+H&-GDDYrj#Cx zf3C1`Qn1(!$np{i5Y{yd9gC8J(nDZ1-Byh>bIg?~RbAIg(rH?ZR@{5I^*aYQuPpoB zPa{eX(^-zz5?^{cEz4+<(rOqc)11I+j21M*8ms3{Rtf;3xS-dz)QltyG*VPb^4t+v zjdPyB>cc!3Ex3H?;_)P2Ut99iIHzzWO|#Sy2Ab(C$JP}6{e)iI9v*q|`lI+G%13K+ zW7+SIQ_h@f5XA+fDCO0gJ#qW$ihsKOUi`Cf`~^N@?v*pJ^7sG%002ovPDHLkV1j!k BAIAUy delta 413 zcmV;O0b>4?1-Ao`B!2{FK}|sb0I`n?{9y$E000SaNLh0L01m+b01m+cxRGn^0000O zbVXQnQ*UN;cVTj60B~VxZgehgWpp4kE-)@RY%_jN0003sNklMiTvV{=+^|#LTU4ONl(nWOO@OU4;^X|J( z{fi2f6v2ABxdiIeGbHAXO$4}keM;3FDg{(1stHa z)&9}$YCyMU%@@ZLk6^$j?JAE5C}d_}Yyiq0T&3x4GNPNnq1X2wL#QU$kM}+Ygts;u0cc)q=@0_$!V*1AFWCYQquS@X zNByo#VdIc|&x{X{F9RsBA6VQIeMIH$1RWS#s{tr``OhDsI+qMbt;K)G!Xh*WT}Fwx zNg9SX1N;?+(4e$qP|Doq!_u&|;Iae~>t%&dSWo{_N)~+p#^$*5nhhhD00000NkvXX Hu0mjfGU>AJ From 32391142ed0d9780b653810a6c31e620642ae24c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 12 Jul 2016 19:34:02 +0200 Subject: [PATCH 15/34] Rapier --- .../mod/config/values/ConfigStringListValues.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigStringListValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigStringListValues.java index 74fc57ea8..1f6296361 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigStringListValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigStringListValues.java @@ -20,7 +20,7 @@ public enum ConfigStringListValues{ DRILL_EXTRA_MINING_WHITELIST("Drill Extra Whitelist", ConfigCategories.TOOL_VALUES, new String[]{"TConstruct:GravelOre"}, "By default, the Drill can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command."), MINER_EXTRA_WHITELIST("Vertical Digger Extra Whitelist", ConfigCategories.MACHINE_VALUES, new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option only applies if the miner is in Ores Only Mode."), MINER_BLACKLIST("Vertical Digger Blacklist", ConfigCategories.MACHINE_VALUES, new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can mine, but shouldn't be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option will apply in both modes."), - REPAIRER_EXTRA_WHITELIST("Item Repairer Extra Whitelist", ConfigCategories.MACHINE_VALUES, new String[]{"tconstruct:pickaxe", "tconstruct:shovel", "tconstruct:hatchet", "tconstruct:mattock", "tconstruct:broadsword", "tconstruct:longsword", "tconstruct:frypan", "tconstruct:battlesign", "tconstruct:hammer", "tconstruct:excavator", "tconstruct:lumberaxe", "tconstruct:cleaver"}, "By default, the Item Repairer only repairs items which are repairable in an anvil. Add an item's REGISTRY NAME here if you want it to be repairable."), + REPAIRER_EXTRA_WHITELIST("Item Repairer Extra Whitelist", ConfigCategories.MACHINE_VALUES, new String[]{"tconstruct:pickaxe", "tconstruct:shovel", "tconstruct:hatchet", "tconstruct:mattock", "tconstruct:broadsword", "tconstruct:longsword", "tconstruct:frypan", "tconstruct:battlesign", "tconstruct:hammer", "tconstruct:excavator", "tconstruct:lumberaxe", "tconstruct:cleaver", "tconstruct:rapier"}, "By default, the Item Repairer only repairs items which are repairable in an anvil. Add an item's REGISTRY NAME here if you want it to be repairable."), SPAWNER_CHANGER_BLACKLIST("Spawner Changer Blacklist", ConfigCategories.OTHER, new String[]{"VillagerGolem"}, "By default, the Spawner Changer allows every living entity to be put into a spawner. If there is one that shouldn't be able to, put its MAPPING NAME here."); public final String name; From 9bafff59d4617b970b9dd3b67efc9fdd80f4a586 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 12 Jul 2016 22:13:50 +0200 Subject: [PATCH 16/34] Make player data less hideous to use. Closes #149 --- .../mod/data/PlayerData.java | 28 ++++++++++--------- .../mod/event/CommonEvents.java | 10 ++++++- .../mod/items/ItemLaserWrench.java | 6 +++- .../mod/network/PacketHandler.java | 13 ++++++--- 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java index 2c4f5b8d7..036938e65 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java @@ -14,48 +14,50 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import java.util.ArrayList; -import java.util.UUID; +//Yes, this is name based instead of UUID-based. +//It just works better this way because of vanilla quirks. Don't judge me. public final class PlayerData{ - public static PlayerSave getDataFromPlayer(EntityPlayer player){ + public static PlayerSave getDataFromPlayer(String name){ ArrayList data = WorldData.PLAYER_SAVE_DATA; //Get Data from existing data for(PlayerSave save : data){ - if(save.thePlayerUUID.equals(player.getUniqueID())){ + if(save.theName != null && save.theName.equals(name)){ return save; } } //Add Data if none is existant - PlayerSave aSave = new PlayerSave(player.getUniqueID(), new NBTTagCompound()); + PlayerSave aSave = new PlayerSave(name, new NBTTagCompound()); data.add(aSave); return aSave; } + public static PlayerSave getDataFromPlayer(EntityPlayer player){ + return getDataFromPlayer(player.getName()); + } + public static class PlayerSave{ - public final UUID thePlayerUUID; + public final String theName; public NBTTagCompound theCompound; - public PlayerSave(UUID theUUID, NBTTagCompound theCompound){ - this.thePlayerUUID = theUUID; + public PlayerSave(String name, NBTTagCompound theCompound){ + this.theName = name; this.theCompound = theCompound; } public static PlayerSave fromNBT(NBTTagCompound compound){ - UUID theID = new UUID(compound.getLong("MostSignificant"), compound.getLong("LeastSignificant")); + String name = compound.getString("Name"); NBTTagCompound theCompound = compound.getCompoundTag("Tag"); - return new PlayerSave(theID, theCompound); + return new PlayerSave(name, theCompound); } public NBTTagCompound toNBT(){ NBTTagCompound compound = new NBTTagCompound(); - compound.setLong("LeastSignificant", this.thePlayerUUID.getLeastSignificantBits()); - compound.setLong("MostSignificant", this.thePlayerUUID.getMostSignificantBits()); - + compound.setString("Name", this.theName); compound.setTag("Tag", this.theCompound); - return compound; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java index e9e7f431b..d053430b2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java @@ -97,7 +97,15 @@ public class CommonEvents{ EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); if(!data.theCompound.hasNoTags()){ - PacketHandler.theNetwork.sendTo(new PacketServerToClient(data.theCompound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), player); + NBTTagCompound compound = new NBTTagCompound(); + compound.setString("Name", player.getName()); + compound.setTag("Data", data.theCompound); + compound.setBoolean("Log", true); + PacketHandler.theNetwork.sendTo(new PacketServerToClient(compound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), player); + ModUtil.LOGGER.info("Sending Player Data to player "+player.getName()+" with info "+data.theCompound+"."); + } + else{ + ModUtil.LOGGER.info("Not sending Player Data to player "+player.getName()+" because he doesn't have any."); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index a2318f1d7..34d70f351 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -23,6 +23,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; @@ -93,7 +94,10 @@ public class ItemLaserWrench extends ItemBase{ save.theCompound.setInteger("LaserWrenchMode", currMode); if(player instanceof EntityPlayerMP){ - PacketHandler.theNetwork.sendTo(new PacketServerToClient(save.theCompound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); + NBTTagCompound compound = new NBTTagCompound(); + compound.setString("Name", player.getName()); + compound.setTag("Data", save.theCompound); + PacketHandler.theNetwork.sendTo(new PacketServerToClient(compound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); } player.addChatComponentMessage(new TextComponentString("Mode changed to "+WrenchMode.values()[currMode].name+"!")); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java index 360c5db25..7501078da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java @@ -98,9 +98,11 @@ public final class PacketHandler{ @Override @SideOnly(Side.CLIENT) public void handleData(NBTTagCompound compound){ - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - if(player != null){ - PlayerData.getDataFromPlayer(player).theCompound = compound; + NBTTagCompound data = compound.getCompoundTag("Data"); + String name = compound.getString("Name"); + PlayerData.getDataFromPlayer(name).theCompound = data; + if(compound.getBoolean("Log")){ + ModUtil.LOGGER.info("Receiving Player Data for player "+name+" with info "+data+"."); } } }; @@ -133,7 +135,10 @@ public final class PacketHandler{ PlayerData.PlayerSave playerData = PlayerData.getDataFromPlayer(player); playerData.theCompound.merge(data); if(player instanceof EntityPlayerMP){ - PacketHandler.theNetwork.sendTo(new PacketServerToClient(playerData.theCompound, PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("Name", player.getName()); + tag.setTag("Data", playerData.theCompound); + PacketHandler.theNetwork.sendTo(new PacketServerToClient(tag, PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); } } } From fdfec92f2494f90e191b2bcf2073b6b6e4f319c3 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 14 Jul 2016 02:11:41 +0200 Subject: [PATCH 17/34] Player Probe. Don't know if it works yet though. --- .../mod/blocks/BlockPlayerInterface.java | 32 ++++- .../mod/creative/CreativeTab.java | 1 + .../mod/items/InitItems.java | 2 + .../mod/items/ItemPlayerProbe.java | 118 ++++++++++++++++++ .../mod/tile/TileEntityPlayerInterface.java | 3 + .../assets/actuallyadditions/lang/en_US.lang | 5 + .../models/item/itemPlayerProbe.json | 6 + .../textures/items/itemPlayerProbe.png | Bin 0 -> 456 bytes 8 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPlayerProbe.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemPlayerProbe.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemPlayerProbe.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java index 2985b692c..a40b9613e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java @@ -10,19 +10,33 @@ package de.ellpeck.actuallyadditions.mod.blocks; +import de.ellpeck.actuallyadditions.api.tile.IPhantomTile; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityPlayerInterface; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; -public class BlockPlayerInterface extends BlockContainerBase{ +public class BlockPlayerInterface extends BlockContainerBase implements IHudDisplay{ public BlockPlayerInterface(String name){ super(Material.ROCK, name); @@ -49,10 +63,26 @@ public class BlockPlayerInterface extends BlockContainerBase{ TileEntityPlayerInterface face = (TileEntityPlayerInterface)tile; if(face.connectedPlayer == null){ face.connectedPlayer = player.getUniqueID(); + face.playerName = player.getName(); face.markDirty(); + face.sendUpdate(); } } super.onBlockPlacedBy(world, pos, state, player, stack); } + + @Override + @SideOnly(Side.CLIENT) + public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ + TileEntity tile = minecraft.theWorld.getTileEntity(posHit.getBlockPos()); + if(tile != null){ + if(tile instanceof TileEntityPlayerInterface){ + TileEntityPlayerInterface face = (TileEntityPlayerInterface)tile; + String name = face.playerName == null ? "Unknown" : face.playerName; + minecraft.fontRendererObj.drawStringWithShadow("Bound to: "+TextFormatting.RED+name, resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+5, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow("UUID: "+TextFormatting.DARK_GREEN+face.connectedPlayer, resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+15, StringUtil.DECIMAL_COLOR_WHITE); + } + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index accdf5025..a8b81546e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -136,6 +136,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockBlackLotus); this.add(InitBlocks.blockBookletStand); + this.add(InitItems.itemPlayerProbe); this.add(InitItems.itemColorLens); this.add(InitItems.itemExplosionLens); this.add(InitItems.itemDamageLens); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 6ed36ad59..d3fa4570c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -207,10 +207,12 @@ public final class InitItems{ public static Item itemWaterBowl; public static Item itemFilter; + public static Item itemPlayerProbe; public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); + itemPlayerProbe = new ItemPlayerProbe("itemPlayerProbe"); itemFilter = new ItemFilter("itemFilter"); itemWaterBowl = new ItemWaterBowl("itemWaterBowl"); itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPlayerProbe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPlayerProbe.java new file mode 100644 index 000000000..562b0e4cc --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPlayerProbe.java @@ -0,0 +1,118 @@ +/* + * This file ("ItemPlayerProbe.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.items; + +import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityPlayerInterface; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; +import java.util.UUID; + +public class ItemPlayerProbe extends ItemBase{ + + public ItemPlayerProbe(String name){ + super(name); + this.setMaxStackSize(1); + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected){ + if(!world.isRemote){ + if(stack.hasTagCompound()){ + NBTTagCompound compound = stack.getTagCompound(); + if(compound.hasKey("UUID")){ + UUID id = compound.getUniqueId("UUID"); + EntityPlayer player = world.getPlayerEntityByUUID(id); + if(player != null){ + if(player.isSneaking()){ + stack.setTagCompound(new NBTTagCompound()); + entity.addChatMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".playerProbe.disconnect.1")); + player.addChatMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".playerProbe.notice")); + } + } + else{ + stack.setTagCompound(new NBTTagCompound()); + entity.addChatMessage(new TextComponentString("tooltip."+ModUtil.MOD_ID+".playerProbe.disconnect.2")); + } + } + } + } + } + + @Override + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityPlayerInterface){ + if(stack.hasTagCompound()){ + NBTTagCompound compound = stack.getTagCompound(); + if(compound.hasKey("UUID")){ + if(!world.isRemote){ + TileEntityPlayerInterface face = (TileEntityPlayerInterface)tile; + face.connectedPlayer = compound.getUniqueId("UUID"); + face.playerName = compound.getString("Name"); + face.markDirty(); + face.sendUpdate(); + } + return EnumActionResult.SUCCESS; + } + } + } + return EnumActionResult.FAIL; + } + + @Override + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity, EnumHand hand){ + if(!player.worldObj.isRemote){ + if(entity instanceof EntityPlayer){ + EntityPlayer playerHit = (EntityPlayer)entity; + + if(!playerHit.isSneaking()){ + if(!stack.hasTagCompound()){ + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound compound = stack.getTagCompound(); + compound.setString("Name", playerHit.getName()); + compound.setUniqueId("UUID", playerHit.getUniqueID()); + } + } + } + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ + if(stack.hasTagCompound()){ + String name = stack.getTagCompound().getString("Name"); + if(name != null){ + list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".playerProbe.probing")+": "+name); + } + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java index 96d246e56..df88393cc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java @@ -25,6 +25,7 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement public static final int DEFAULT_RANGE = 32; private final EnergyStorage storage = new EnergyStorage(30000); public UUID connectedPlayer; + public String playerName; private int oldEnergy; private int range; @@ -85,6 +86,7 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement this.storage.writeToNBT(compound); if(this.connectedPlayer != null && type != NBTType.SAVE_BLOCK){ compound.setUniqueId("Player", this.connectedPlayer); + compound.setString("PlayerName", this.playerName); } } @@ -93,6 +95,7 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement this.storage.readFromNBT(compound); if(compound.hasKey("PlayerLeast") && type != NBTType.SAVE_BLOCK){ this.connectedPlayer = compound.getUniqueId("Player"); + this.playerName = compound.getString("PlayerName"); } } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 1694ab5ce..a57599877 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -496,6 +496,7 @@ item.actuallyadditions.itemWaterBowl.name=Bowl of Water item.actuallyadditions.itemFilter.name=Item Filter item.actuallyadditions.itemMiscBiomass.name=Biomass item.actuallyadditions.itemMiscBiocoal.name=Bio Coal +item.actuallyadditions.itemPlayerProbe.name=Player Probe #Tooltips tooltip.actuallyadditions.onSuffix.desc=On @@ -526,6 +527,10 @@ tooltip.actuallyadditions.laser.stored.desc= tooltip.actuallyadditions.laser.connected.desc= tooltip.actuallyadditions.laser.cantConnect.desc=Can't connect: The relays are either part of the same network, the stored relay isn't the same type or doesn't exist anymore or it is too far away! tooltip.actuallyadditions.itemBooklet.desc=Or "Booklet", if you will +tooltip.actuallyadditions.playerProbe.disconnect.1=The player you were probing has broken the connection before you could strap him to the Player Interface! Data will be cleared! +tooltip.actuallyadditions.playerProbe.disconnect.2=The player you were probing has disconnected before you could strap him to the Player Interface! Data will be cleared! +tooltip.actuallyadditions.playerProbe.probing=Probing +tooltip.actuallyadditions.playerProbe.notice=Look out! Someone tried to probe you and strap you to a Player Interface, but they failed! #Gui Information info.actuallyadditions.gui.animals=Animals diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPlayerProbe.json b/src/main/resources/assets/actuallyadditions/models/item/itemPlayerProbe.json new file mode 100644 index 000000000..8a934a352 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPlayerProbe.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemPlayerProbe" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemPlayerProbe.png b/src/main/resources/assets/actuallyadditions/textures/items/itemPlayerProbe.png new file mode 100644 index 0000000000000000000000000000000000000000..60dfe1b7920ffa18370c816f81e901211cf235ef GIT binary patch literal 456 zcmV;(0XP1MP)N2bZe?^J zG%heMIczh2P5=M_MoC0LR5(v#0D=Gi|C5Zdf`WpA|H;Y8SY<;(La@tuE}Q~oF))OM zh5ZK^0>V%sFaT);iGd7(3ZVjILqLiH0|QYM;?;}}jE#-4Dl|1UCC&g{UETlaia~s$ z4A58L1uFy@q9McmUqyoBznT;mTufI+5WgYXa=iax*jPpIzmt~Ge|s&_|2lGf5JP|l z05McG768(?tuyEU-oB#$$EG#>-`iaTWS9J3Qx^5#L{*5e0jp}${%>i?{STtoHst=F zQxx-mcW2T6Ihj6SOwa(3W)KLn?fk#BIvuPT#0CM7p#%+>lkE0?b9K`H?M+4hvm6Y- zcwa}(|3z8u{~Ll$2pcdV&iVhec!&SxPNpchKhExdW3VM*1M*#U{^vStffa*rm7nqd y=1^-e2C)em098N;LsjDdAO(al2te`=0|Nl$A@;)Bsrq050000 Date: Thu, 14 Jul 2016 12:53:27 +0200 Subject: [PATCH 18/34] Renamed mashed food to bio mash --- src/main/resources/assets/actuallyadditions/lang/en_US.lang | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index a57599877..6e4ec3f88 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -331,7 +331,7 @@ item.actuallyadditions.itemDrillUpgradeFortuneII.name=Drill Fortune Augment II ( item.actuallyadditions.itemDrillUpgradeBlockPlacing.name=Drill Block Placing Augment item.actuallyadditions.itemDrillUpgradeThreeByThree.name=Drill Mining Augment I item.actuallyadditions.itemDrillUpgradeFiveByFive.name=Drill Mining Augment II -item.actuallyadditions.itemMiscMashedFood.name=Mashed Food +item.actuallyadditions.itemMiscMashedFood.name=Bio-Mash item.actuallyadditions.itemFertilizer.name=Fertilizer item.actuallyadditions.itemMiscDough.name=Dough item.actuallyadditions.itemMiscPaperCone.name=Paper Cone @@ -744,8 +744,8 @@ booklet.actuallyadditions.chapter.feeder.name=Feeder booklet.actuallyadditions.chapter.feeder.text.1=The Feeder is a good alternative to a manual animal farm. Place it in the middle of an animal pen and supply it with some wheat, seeds or carrots, depending on the animal you want to feed, and just wait. It will automatically feed the animals and if there is enough animals near it, it will shut off on its own to prevent lag or animal overflow. Greenpeace approves booklet.actuallyadditions.chapter.compost.name=Compost and Fertilizer -booklet.actuallyadditions.chapter.compost.text.1=The Compost is used to make Fertilizier from Mashed Food. Fertilizer acts just like Bone Meal, but can be crafted in a much simpler manner just by crafting Mashed Food and then putting 10 of those inside of a Compost and waiting for a bit. When the mashed food is composted, just take it out by right-clicking again. This, however, also works for some other items, which will be explained when needed. -booklet.actuallyadditions.chapter.compost.text.3=Mashed Food can be crafted from any type of food or plantable item. +booklet.actuallyadditions.chapter.compost.text.1=The Compost is used to make Fertilizier from Bio-Mash. Fertilizer acts just like Bone Meal, but can be crafted in a much simpler manner just by crafting Bio-Mash and then putting 10 of those inside of a Compost and waiting for a bit. When the mash is composted, just take it out by right-clicking again. This, however, also works for some other items, which will be explained when needed. +booklet.actuallyadditions.chapter.compost.text.3=Bio-Mash can be crafted from any type of food or plantable item. booklet.actuallyadditions.chapter.crate.name=Storage Crates booklet.actuallyadditions.chapter.crate.text.1=Storage Crates are big. Really big. They hold tons of items, more than 4 chests worth of them. Not only that, but they can be upgraded in size! View the following pages to get information on that and some other items regarding crates! From bb0d64e8694c46f3efd867d19e8aeebfdc2b730c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 14 Jul 2016 13:02:09 +0200 Subject: [PATCH 19/34] Made the booklet search bar search a whole item's tooltip --- .../actuallyadditions/mod/booklet/BookletUtils.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 12d081624..1b57798fc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -229,12 +229,20 @@ public final class BookletUtils{ } private static boolean getChapterStacksContainString(String text, IBookletChapter chapter){ + Minecraft mc = Minecraft.getMinecraft(); for(BookletPage page : chapter.getPages()){ ItemStack[] pageStacks = page.getItemStacksForPage(); if(pageStacks != null){ for(ItemStack stack : pageStacks){ - if(stack != null && stack.getDisplayName().toLowerCase(Locale.ROOT).contains(text)){ - return true; + if(stack != null && stack.getItem() != null){ + List list = stack.getTooltip(mc.thePlayer, mc.gameSettings.advancedItemTooltips); + for(String s : list){ + if(s != null && !s.isEmpty()){ + if(s.toLowerCase(Locale.ROOT).contains(text)){ + return true; + } + } + } } } } From 16d74df3cc2c21b5309ca61a2da0171b4d119a03 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 14 Jul 2016 13:41:29 +0200 Subject: [PATCH 20/34] Fixed player probe being broken Thanks for help tiemo42 ^-^ --- .../mod/items/ItemPlayerProbe.java | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPlayerProbe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPlayerProbe.java index 562b0e4cc..78f6ce2ef 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPlayerProbe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPlayerProbe.java @@ -45,7 +45,7 @@ public class ItemPlayerProbe extends ItemBase{ if(!world.isRemote){ if(stack.hasTagCompound()){ NBTTagCompound compound = stack.getTagCompound(); - if(compound.hasKey("UUID")){ + if(compound.hasKey("UUIDMost")){ UUID id = compound.getUniqueId("UUID"); EntityPlayer player = world.getPlayerEntityByUUID(id); if(player != null){ @@ -57,7 +57,7 @@ public class ItemPlayerProbe extends ItemBase{ } else{ stack.setTagCompound(new NBTTagCompound()); - entity.addChatMessage(new TextComponentString("tooltip."+ModUtil.MOD_ID+".playerProbe.disconnect.2")); + entity.addChatMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".playerProbe.disconnect.2")); } } } @@ -70,13 +70,15 @@ public class ItemPlayerProbe extends ItemBase{ if(tile instanceof TileEntityPlayerInterface){ if(stack.hasTagCompound()){ NBTTagCompound compound = stack.getTagCompound(); - if(compound.hasKey("UUID")){ + if(compound.hasKey("UUIDMost")){ if(!world.isRemote){ TileEntityPlayerInterface face = (TileEntityPlayerInterface)tile; face.connectedPlayer = compound.getUniqueId("UUID"); face.playerName = compound.getString("Name"); face.markDirty(); face.sendUpdate(); + + stack.setTagCompound(new NBTTagCompound()); } return EnumActionResult.SUCCESS; } @@ -86,19 +88,23 @@ public class ItemPlayerProbe extends ItemBase{ } @Override - public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity, EnumHand hand){ + public boolean itemInteractionForEntity(ItemStack aStack, EntityPlayer player, EntityLivingBase entity, EnumHand hand){ if(!player.worldObj.isRemote){ - if(entity instanceof EntityPlayer){ - EntityPlayer playerHit = (EntityPlayer)entity; + ItemStack stack = player.getHeldItemMainhand(); + if(stack != null && stack.getItem() == this){ + if(entity instanceof EntityPlayer){ + EntityPlayer playerHit = (EntityPlayer)entity; - if(!playerHit.isSneaking()){ - if(!stack.hasTagCompound()){ - stack.setTagCompound(new NBTTagCompound()); + if(!playerHit.isSneaking()){ + if(!stack.hasTagCompound()){ + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound compound = stack.getTagCompound(); + compound.setString("Name", playerHit.getName()); + compound.setUniqueId("UUID", playerHit.getUniqueID()); + return true; } - - NBTTagCompound compound = stack.getTagCompound(); - compound.setString("Name", playerHit.getName()); - compound.setUniqueId("UUID", playerHit.getUniqueID()); } } } From 07a9ae219bc6ade073be1faeb2481c4d0ec2e588 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 14 Jul 2016 16:44:01 +0200 Subject: [PATCH 21/34] energy laser relay variation --- .../mod/blocks/BlockLaserRelay.java | 13 +- .../mod/blocks/InitBlocks.java | 11 +- .../mod/booklet/InitBooklet.java | 2 +- .../mod/config/values/ConfigBoolValues.java | 4 +- .../mod/config/values/ConfigIntValues.java | 3 - .../mod/creative/CreativeTab.java | 2 + .../mod/tile/TileEntityBase.java | 16 +- .../mod/tile/TileEntityLaserRelayEnergy.java | 28 +- .../TileEntityLaserRelayEnergyAdvanced.java | 30 + .../TileEntityLaserRelayEnergyExtreme.java | 30 + .../blockstates/blockLaserRelayAdvanced.json | 19 + .../blockstates/blockLaserRelayExtreme.json | 19 + .../assets/actuallyadditions/lang/en_US.lang | 11 +- .../models/block/blockLaserRelayAdvanced.json | 880 ++++++++++++++++++ .../models/block/blockLaserRelayExtreme.json | 880 ++++++++++++++++++ .../blocks/models/modelLaserRelay.png | Bin 233 -> 283 bytes .../blocks/models/modelLaserRelayAdvanced.png | Bin 0 -> 283 bytes .../blocks/models/modelLaserRelayExtreme.png | Bin 0 -> 280 bytes 18 files changed, 1924 insertions(+), 24 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergyAdvanced.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergyExtreme.java create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayAdvanced.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayExtreme.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayAdvanced.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayExtreme.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelayAdvanced.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelayExtreme.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 775934de5..248f39a8c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -13,10 +13,7 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayEnergy; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist; +import de.ellpeck.actuallyadditions.mod.tile.*; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -135,13 +132,19 @@ public class BlockLaserRelay extends BlockContainerBase{ return new TileEntityLaserRelayItem(); case ITEM_WHITELIST: return new TileEntityLaserRelayItemWhitelist(); + case ENERGY_ADVANCED: + return new TileEntityLaserRelayEnergyAdvanced(); + case ENERGY_EXTREME: + return new TileEntityLaserRelayEnergyExtreme(); default: return new TileEntityLaserRelayEnergy(); } } public enum Type{ - ENERGY, + ENERGY_BASIC, + ENERGY_ADVANCED, + ENERGY_EXTREME, ITEM, ITEM_WHITELIST } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index f8661ff8a..cec55875d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.blocks; +import de.ellpeck.actuallyadditions.mod.blocks.BlockLaserRelay.Type; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockStair; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; @@ -95,6 +96,8 @@ public final class InitBlocks{ public static Block blockRangedCollector; public static Block blockLaserRelay; + public static Block blockLaserRelayAdvanced; + public static Block blockLaserRelayExtreme; public static Block blockLaserRelayItem; public static Block blockLaserRelayItemWhitelist; public static Block blockItemViewer; @@ -134,9 +137,11 @@ public final class InitBlocks{ blockAtomicReconstructor = new BlockAtomicReconstructor("blockAtomicReconstructor"); blockCrystal = new BlockCrystal("blockCrystal"); blockBlackLotus = new BlockBlackLotus("blockBlackLotus"); - blockLaserRelay = new BlockLaserRelay("blockLaserRelay", BlockLaserRelay.Type.ENERGY); - blockLaserRelayItem = new BlockLaserRelay("blockLaserRelayItem", BlockLaserRelay.Type.ITEM); - blockLaserRelayItemWhitelist = new BlockLaserRelay("blockLaserRelayItemWhitelist", BlockLaserRelay.Type.ITEM_WHITELIST); + blockLaserRelay = new BlockLaserRelay("blockLaserRelay", Type.ENERGY_BASIC); + blockLaserRelayAdvanced = new BlockLaserRelay("blockLaserRelayAdvanced", Type.ENERGY_ADVANCED); + blockLaserRelayExtreme = new BlockLaserRelay("blockLaserRelayExtreme", Type.ENERGY_EXTREME); + blockLaserRelayItem = new BlockLaserRelay("blockLaserRelayItem", Type.ITEM); + blockLaserRelayItemWhitelist = new BlockLaserRelay("blockLaserRelayItemWhitelist", Type.ITEM_WHITELIST); blockRangedCollector = new BlockRangedCollector("blockRangedCollector"); blockDirectionalBreaker = new BlockDirectionalBreaker("blockDirectionalBreaker"); blockLeafGenerator = new BlockLeafGenerator("blockLeafGenerator"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 60bc5274f..3908327cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -107,7 +107,7 @@ public final class InitBooklet{ //RF Using Blocks new BookletChapter("fireworkBox", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockFireworkBox), new PageTextOnly(1).addTextReplacement("", TileEntityFireworkBox.USE_PER_SHOT), new PageCrafting(2, BlockCrafting.recipeFireworkBox)).setSpecial(); - new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("", TileEntityLaserRelay.MAX_DISTANCE).addTextReplacement("", ConfigIntValues.LASER_RELAY_LOSS.getValue()), new PagePicture(2, "pageLaserRelay", 0).setNoText(), new PageCrafting(3, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(4, ItemCrafting.recipeLaserWrench)).setImportant(); + new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("", TileEntityLaserRelay.MAX_DISTANCE), new PageTextOnly(2).addTextReplacement("", TileEntityLaserRelayEnergy.CAP).addTextReplacement("", TileEntityLaserRelayEnergyAdvanced.CAP).addTextReplacement("", TileEntityLaserRelayEnergyExtreme.CAP), new PagePicture(3, "pageLaserRelay", 0).setNoText(), new PageCrafting(4, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeLaserWrench)).setImportant(); new BookletChapter("miner", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockMiner), new PageTextOnly(1).addTextReplacement("", TileEntityMiner.ENERGY_USE_PER_BLOCK).addTextReplacement("", TileEntityMiner.DEFAULT_RANGE), new PageCrafting(2, BlockCrafting.recipeMiner)).setSpecial(); new BookletChapterCoffee("coffeeMachine", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("", TileEntityCoffeeMachine.ENERGY_USED).addTextReplacement("", TileEntityCoffeeMachine.CACHE_USE).addTextReplacement("", TileEntityCoffeeMachine.WATER_USE), new PageTextOnly(2).setStacks(new ItemStack(InitItems.itemCoffee)), new PagePicture(3, "pageCoffeeMachine", 115), new PageCrafting(4, BlockCrafting.recipeCoffeeMachine).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeCup).setNoText()).setImportant(); new BookletChapterCrusher("crusher", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockGrinderDouble), new PageTextOnly(1).addTextReplacement("", TileEntityGrinder.ENERGY_USE), new PageCrafting(2, BlockCrafting.recipeCrusher).setNoText().setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeDoubleCrusher).setNoText().setPageStacksWildcard(), new PageCrusherRecipe(4, CrusherCrafting.recipeIronHorseArmor).setNoText(), new PageCrusherRecipe(5, CrusherCrafting.recipeGoldHorseArmor).setNoText(), new PageCrusherRecipe(6, CrusherCrafting.recipeDiamondHorseArmor).setNoText()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index a534d230c..884fe2754 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -56,7 +56,9 @@ public enum ConfigBoolValues{ LESS_SOUND("Less Sound", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less sounds"), LESS_PARTICLES("Less Particles", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less particles"), - LESS_BLOCK_BREAKING_EFFECTS("Less Block Breaking Effects", ConfigCategories.PERFORMANCE, false, "If there should not be a sound effect and particles when a block is being destroyed by a breaker or similar"); + LESS_BLOCK_BREAKING_EFFECTS("Less Block Breaking Effects", ConfigCategories.PERFORMANCE, false, "If there should not be a sound effect and particles when a block is being destroyed by a breaker or similar"), + + LASER_RELAY_LOSS("Laser Relay Energy Loss", ConfigCategories.MACHINE_VALUES, true, "If Energy Laser Relays should have energy loss"); public final String name; public final String category; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java index bcf79233a..41eb4f576 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java @@ -23,9 +23,6 @@ public enum ConfigIntValues{ BLACK_LOTUS_AMOUNT("Black Lotus: Amount", ConfigCategories.WORLD_GEN, 14, 1, 50, "The Amount of Black Lotus generating"), LUSH_CAVE_CHANCE("Lush Caves: Chance", ConfigCategories.WORLD_GEN, 20, 1, 100, "The chance for lush caves to generate. The lower the number, the likelier."), - LASER_RELAY_LOSS("Laser Relay: Loss", ConfigCategories.MACHINE_VALUES, 5, 0, 80, "The Energy Loss of the Laser Relay per Transfer in Percent"), - LASER_RELAY_MAX_TRANSFER("Laser Relay: Max Transfer", ConfigCategories.MACHINE_VALUES, 10000, 100, 1000000, "The max amount of RF a Laser Relay can receive and try to transfer (if it's given 100 RF and can only transfer 50, it will only accept 50, it won't waste any power!)"), - TILE_ENTITY_UPDATE_INTERVAL("Tile Entities: Update Interval", ConfigCategories.OTHER, 5, 1, 100, "The amount of ticks waited before a TileEntity sends an additional Update to the Client"); public final String name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index a8b81546e..cbad6eb77 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -55,6 +55,8 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockFireworkBox); this.add(InitBlocks.blockLaserRelay); + this.add(InitBlocks.blockLaserRelayAdvanced); + this.add(InitBlocks.blockLaserRelayExtreme); this.add(InitBlocks.blockLaserRelayItem); this.add(InitBlocks.blockLaserRelayItemWhitelist); this.add(InitBlocks.blockItemViewer); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 541825031..bac9eb3ee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -98,6 +98,8 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ register(TileEntityPhantomRedstoneface.class, "PhantomRedstoneface"); register(TileEntityLaserRelayItem.class, "LaserRelayItem"); register(TileEntityLaserRelayEnergy.class, "LaserRelay"); + register(TileEntityLaserRelayEnergyAdvanced.class); + register(TileEntityLaserRelayEnergyExtreme.class); register(TileEntityLaserRelayItemWhitelist.class, "LaserRelayItemWhitelist"); register(TileEntityItemViewer.class, "ItemViewer"); register(TileEntityBookletStand.class, "BookletStand"); @@ -117,14 +119,24 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ try{ //This is hacky and dirty but it works so whatever String name = ModUtil.MOD_ID+":"+tileClass.newInstance().name; - String oldName = ModUtil.MOD_ID+":tileEntity"+legacyName; - GameRegistry.registerTileEntityWithAlternatives(tileClass, name, oldName); + + if(legacyName != null && !legacyName.isEmpty()){ + String oldName = ModUtil.MOD_ID+":tileEntity"+legacyName; + GameRegistry.registerTileEntityWithAlternatives(tileClass, name, oldName); + } + else{ + GameRegistry.registerTileEntity(tileClass, name); + } } catch(Exception e){ ModUtil.LOGGER.fatal("Registering a TileEntity failed!", e); } } + private static void register(Class tileClass){ + register(tileClass, null); + } + @Override public void readFromNBT(NBTTagCompound compound){ super.readFromNBT(compound); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index 59face492..db27c4fc6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import net.minecraft.tileentity.TileEntity; @@ -26,8 +27,14 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements public final Map receiversAround = new HashMap(); + public static final int CAP = 1000; + + public TileEntityLaserRelayEnergy(String name){ + super(name, false); + } + public TileEntityLaserRelayEnergy(){ - super("laserRelay", false); + this("laserRelay"); } @Override @@ -50,7 +57,7 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements if(maxTransmit > 0){ LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj); if(network != null){ - transmitted = this.transferEnergyToReceiverInNeed(from, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); + transmitted = this.transferEnergyToReceiverInNeed(from, network, maxTransmit, simulate); } } return transmitted; @@ -85,14 +92,17 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements alreadyChecked.add(relay); TileEntity relayTile = this.worldObj.getTileEntity(relay); if(relayTile instanceof TileEntityLaserRelayEnergy){ - for(Map.Entry receiver : ((TileEntityLaserRelayEnergy)relayTile).receiversAround.entrySet()){ + TileEntityLaserRelayEnergy theRelay = (TileEntityLaserRelayEnergy)relayTile; + double highestLoss = Math.max(theRelay.getLossPercentage(), this.getLossPercentage()); + int lowestCap = Math.min(theRelay.getEnergyCap(), this.getEnergyCap()); + for(Map.Entry receiver : theRelay.receiversAround.entrySet()){ if(receiver != null && receiver.getKey() != null && receiver.getValue() != null){ if(receiver.getKey() != from){ if(receiver.getValue().canConnectEnergy(receiver.getKey().getOpposite())){ //Transfer the energy (with the energy loss!) - int theoreticalReceived = receiver.getValue().receiveEnergy(receiver.getKey().getOpposite(), maxTransfer-transmitted, true); + int theoreticalReceived = receiver.getValue().receiveEnergy(receiver.getKey().getOpposite(), Math.min(maxTransfer, lowestCap)-transmitted, true); //The amount of energy lost during a transfer - int deduct = (int)(theoreticalReceived*((double)ConfigIntValues.LASER_RELAY_LOSS.getValue()/100)); + int deduct = ConfigBoolValues.LASER_RELAY_LOSS.isEnabled() ? (int)(theoreticalReceived*(highestLoss/100)) : 0; transmitted += receiver.getValue().receiveEnergy(receiver.getKey().getOpposite(), theoreticalReceived-deduct, simulate); transmitted += deduct; @@ -111,4 +121,12 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements } return transmitted; } + + public int getEnergyCap(){ + return CAP; + } + + public double getLossPercentage(){ + return 5; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergyAdvanced.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergyAdvanced.java new file mode 100644 index 000000000..f65c3dd45 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergyAdvanced.java @@ -0,0 +1,30 @@ +/* + * This file ("TileEntityLaserRelayEnergyAdvanced.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.tile; + +public class TileEntityLaserRelayEnergyAdvanced extends TileEntityLaserRelayEnergy{ + + public static final int CAP = 10000; + + public TileEntityLaserRelayEnergyAdvanced(){ + super("laserRelayAdvanced"); + } + + @Override + public int getEnergyCap(){ + return CAP; + } + + @Override + public double getLossPercentage(){ + return 8; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergyExtreme.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergyExtreme.java new file mode 100644 index 000000000..ce9253b5c --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergyExtreme.java @@ -0,0 +1,30 @@ +/* + * This file ("TileEntityLaserRelayEnergyExtreme.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.tile; + +public class TileEntityLaserRelayEnergyExtreme extends TileEntityLaserRelayEnergy{ + + public static final int CAP = 100000; + + public TileEntityLaserRelayEnergyExtreme(){ + super("laserRelayExtreme"); + } + + @Override + public int getEnergyCap(){ + return CAP; + } + + @Override + public double getLossPercentage(){ + return 10; + } +} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayAdvanced.json b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayAdvanced.json new file mode 100644 index 000000000..0234f4ce8 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayAdvanced.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockLaserRelayAdvanced", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x": 180 }, + "1": {}, + "2": { "x": 90 }, + "3": { "x": 270 }, + "4": { "x": 90, "y": 270 }, + "5": { "x": 270, "y": 270 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayExtreme.json b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayExtreme.json new file mode 100644 index 000000000..477178697 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayExtreme.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockLaserRelayExtreme", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x": 180 }, + "1": {}, + "2": { "x": 90 }, + "3": { "x": 270 }, + "4": { "x": 90, "y": 270 }, + "5": { "x": 270, "y": 270 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 6e4ec3f88..f81363ca3 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -184,7 +184,9 @@ tile.actuallyadditions.blockSmileyCloud.name=Smiley Cloud tile.actuallyadditions.blockLeafGenerator.name=Leaf-Eating Generator tile.actuallyadditions.blockDirectionalBreaker.name=Long-Range Breaker tile.actuallyadditions.blockRangedCollector.name=Ranged Collector -tile.actuallyadditions.blockLaserRelay.name=Laser Relay +tile.actuallyadditions.blockLaserRelay.name=Energy Laser Relay +tile.actuallyadditions.blockLaserRelayAdvanced.name=Advanced Energy Laser Relay +tile.actuallyadditions.blockLaserRelayExtreme.name=Extreme Energy Laser Relay tile.actuallyadditions.blockMiscIronCasing.name=Iron Casing tile.actuallyadditions.blockBlackLotus.name=Black Lotus tile.actuallyadditions.blockTestifiBucksWhiteFence.name=Ethetic Quartz Wall @@ -845,9 +847,10 @@ booklet.actuallyadditions.chapter.hairBalls.name=Ball of Fur-s booklet.actuallyadditions.chapter.hairBalls.text.1=Balls of Fur dropped by live cats. More information on the next page. booklet.actuallyadditions.chapter.hairBalls.text.2=Balls of Fur are an item rarely dropped by cats which have been tamed by the player. Cats are very mysterious creatures as they appear to get everything stuck in their fur. Balls of Fur may seem disgusting at first, but when removing all of the hair by right-clicking, they will reveal some valuable items. Or just some String. FUURRRRRR!! -booklet.actuallyadditions.chapter.laserRelays.name=Laser Relays -booklet.actuallyadditions.chapter.laserRelays.text.1=The Laser Relay is a block that can wirelessly transfer RF just by being connected with a Laser Wrench, generating a network. When placing a Power Generator or Receiver next to the relay, it can receive Power from any other relay in the network. Two relays can be at most blocks apart. During an energy transfer, they have an Energy Loss of %. -booklet.actuallyadditions.chapter.laserRelays.text.4=The Laser Wrench's mode can be switched by sneak-right-clicking it anywhere. Possible modes are to always show lasers, never show lasers or only show lasers when holding the wrench. +booklet.actuallyadditions.chapter.laserRelays.name=Energy Laser Relays +booklet.actuallyadditions.chapter.laserRelays.text.1=The Energy Laser Relay is a block that can wirelessly transfer RF (or Tesla) just by being connected with a Laser Wrench, generating a network. When placing a Power Generator or Receiver next to the relay, it can receive Power from any other relay in the network. This system always works in both directions simultaneously. Two relays can be at most blocks apart. During an energy transfer, they have a light Energy Loss, but nothing to worry about. +booklet.actuallyadditions.chapter.laserRelays.text.2=There are three tiers of Energy Laser Relay. They have different maximum amounts of energy to be transferred through them in one tick. The energy caps are, in order, , , and . Additionally, the energy loss is a bit higher every tier. Interconnecting different tiers is possible, however the lowest cap and highest loss of the two relays connected to the blocks involved in the transfer is considered. +booklet.actuallyadditions.chapter.laserRelays.text.5=The Laser Wrench's mode can be switched by sneak-right-clicking it anywhere. Possible modes are to always show lasers, never show lasers or only show lasers when holding the wrench. booklet.actuallyadditions.chapter.blackLotus.name=Black Lotus booklet.actuallyadditions.chapter.blackLotus.text.1=Think of this: You need to craft black wool, black clay or anything else that needs black dye but you are just guilty about killing so many innocent squids? Well, the Black Lotus is exactly the thing you need! Just look around in the wild a bit, and you will find one, then being able to craft some Black Dye that can be used instead of Ink Sacs so that you don't need to kill poor squids and L any longer. diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayAdvanced.json b/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayAdvanced.json new file mode 100644 index 000000000..24a569026 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayAdvanced.json @@ -0,0 +1,880 @@ +{ + "__createdBy": "canitzp", + "ambientocclusion": false, + "textures": { + "particle": "actuallyadditions:blocks/models/modelLaserRelayAdvanced", + "laserRelay": "actuallyadditions:blocks/models/modelLaserRelayAdvanced" + }, + "elements": [ + { + "from": [4,0,4], + "to": [12,1,12], + "faces": { + "up": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,1,3], + "to": [12,4,4], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,1,12], + "to": [12,4,13], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,11,12], + "to": [12,14,13], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,11,3], + "to": [12,14,4], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,4,2], + "to": [12,5,3], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,10,2], + "to": [12,11,3], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,10,13], + "to": [12,11,14], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,4,13], + "to": [12,5,14], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [5.5,1,5.5], + "to": [10.5,3,10.5], + "faces": { + "up": { + "uv": [13.5,13.5,16,16], + "texture": "#laserRelay" + }, + "down": { + "uv": [0.0,0.0,5.0,5.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + } + } + }, + { + "from": [7,3,7], + "to": [9,14,9], + "faces": { + "up": { + "uv": [0.0,0.0,2.0,2.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,2.0,2.0], + "texture": "missingtexture" + }, + "west": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "east": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "north": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "south": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,14,4], + "to": [12,15,12], + "faces": { + "up": { + "uv": [1,12,5,15], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [6.5,6.5,6.5], + "to": [9.5,9.5,9.5], + "faces": { + "up": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "down": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "west": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "east": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "north": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "south": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,5,2], + "to": [5,10,3], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [11,5,2], + "to": [12,10,3], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [11,5,13], + "to": [12,10,14], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,5,13], + "to": [5,10,14], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [3,1,4], + "to": [4,4,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [12,1,4], + "to": [13,4,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [12,11,4], + "to": [13,14,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [3,11,4], + "to": [4,14,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,4,4], + "to": [3,5,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,10,4], + "to": [3,11,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,10,4], + "to": [14,11,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,4,4], + "to": [14,5,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,5,4], + "to": [3,10,5], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,5,11], + "to": [3,10,12], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,5,11], + "to": [14,10,12], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,5,4], + "to": [14,10,5], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayExtreme.json b/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayExtreme.json new file mode 100644 index 000000000..756ae2b41 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayExtreme.json @@ -0,0 +1,880 @@ +{ + "__createdBy": "canitzp", + "ambientocclusion": false, + "textures": { + "particle": "actuallyadditions:blocks/models/modelLaserRelayExtreme", + "laserRelay": "actuallyadditions:blocks/models/modelLaserRelayExtreme" + }, + "elements": [ + { + "from": [4,0,4], + "to": [12,1,12], + "faces": { + "up": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,1,3], + "to": [12,4,4], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,1,12], + "to": [12,4,13], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,11,12], + "to": [12,14,13], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,11,3], + "to": [12,14,4], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,4,2], + "to": [12,5,3], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,10,2], + "to": [12,11,3], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,10,13], + "to": [12,11,14], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,4,13], + "to": [12,5,14], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [5.5,1,5.5], + "to": [10.5,3,10.5], + "faces": { + "up": { + "uv": [13.5,13.5,16,16], + "texture": "#laserRelay" + }, + "down": { + "uv": [0.0,0.0,5.0,5.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + } + } + }, + { + "from": [7,3,7], + "to": [9,14,9], + "faces": { + "up": { + "uv": [0.0,0.0,2.0,2.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,2.0,2.0], + "texture": "missingtexture" + }, + "west": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "east": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "north": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "south": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,14,4], + "to": [12,15,12], + "faces": { + "up": { + "uv": [1,12,5,15], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [6.5,6.5,6.5], + "to": [9.5,9.5,9.5], + "faces": { + "up": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "down": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "west": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "east": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "north": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "south": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,5,2], + "to": [5,10,3], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [11,5,2], + "to": [12,10,3], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [11,5,13], + "to": [12,10,14], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,5,13], + "to": [5,10,14], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [3,1,4], + "to": [4,4,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [12,1,4], + "to": [13,4,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [12,11,4], + "to": [13,14,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [3,11,4], + "to": [4,14,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,4,4], + "to": [3,5,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,10,4], + "to": [3,11,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,10,4], + "to": [14,11,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,4,4], + "to": [14,5,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,5,4], + "to": [3,10,5], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,5,11], + "to": [3,10,12], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,5,11], + "to": [14,10,12], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,5,4], + "to": [14,10,5], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelay.png b/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelay.png index f6c3976c8832d6a37b5bf2573beaa377522df15a..3e9140c008376ef03259e93e31bd42c1467c60e0 100644 GIT binary patch delta 255 zcmaFKIGbsLNGZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x382Ao>Fr%o3 zR|8Oxy~NYkmHh!D7r%yn>D)CIKp}||*NBqf{Irtt#G+J&g2c?c61}|C5(N`I13k+e z<2pZ}no3U>$B+p3w^tAHHYo74CaNW{rfoVahj3``0Q`x6*;f4|4W9Amlr zvyFDgD~5~f+^#Y%itXjv$5hRD|BVlW%muY7=953WfAuV6y8(0sgQu&X%Q~loCIBnI BSi1lK delta 205 zcmbQu^pbIcNM1MG8=my~NYkmHh!D z7r%yn>D)CIK%p{E7srr@!^tK_M!(KGxEnmZV<}=Me3+p*kbT32+fJu1YDknGSi$Tj zYw(J} z>SE0h9&_<5!lvI6;>1s;*b3=DjSK$uZf!>a)($X?><>&pIsk&9nLzjW>z3!sohiEBhjaDG}z zd16s2LqTF@UWr~_YKel0o`Ifaj&YqIP)(($i(^QH``fDrIU5XkS|9pcNPM*6p3L#h zC7j1QmRxYYeI&Z*rS%_yjStutdYsXjdDq36;SIaM-xrlzZ{^5#@c@lrU})GWav=D1 z;?nm(U$A}%mvVT&*YdmKuI(bl_tIJ8xDVV84FMA`wJ+Ew_|IqbVDH&jV>D|ThsJWL PW{?4%u6{1-oD!M<7|33x literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelayExtreme.png b/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelayExtreme.png new file mode 100644 index 0000000000000000000000000000000000000000..079149cea593a6e6f140e6b6546da4a9a53b063b GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSK$uZf!>a)($X?><>&pIsk&9nLzjW>z3!sohiEBhjaDG}z zd16s2LqTF@UWr~_YKel0o`Ifaj&YqIP)(Vqi(^QH``fDcr=vj{jaFtQwAysyx(_nPXd z{elh*EFZ*q9(=c(mDsR(O2NEz)<{`}+gDduIc!@Ucrg5d{)5@`IUAU7UC}%AdeWc1 T9bYy9UBKY!>gTe~DWM4f Date: Thu, 14 Jul 2016 18:12:09 +0200 Subject: [PATCH 22/34] yoga --- .../de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java | 2 +- src/main/resources/assets/actuallyadditions/lang/en_US.lang | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 3908327cf..190a828bf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -128,7 +128,7 @@ public final class InitBooklet{ //No RF Using Items new BookletChapter("wings", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemWingsOfTheBats), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BAT_WING.ordinal())), new PageCrafting(2, ItemCrafting.recipeWings).setNoText()).setSpecial(); - new BookletChapter("foods", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemFoods, 1, TheFoods.HAMBURGER.ordinal()), new PageCrafting(1, FoodCrafting.recipeBacon), new PageFurnace(2, new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE_BREAD.ordinal())).setNoText(), new PageCrafting(3, FoodCrafting.recipeHamburger).setNoText(), new PageCrafting(4, FoodCrafting.recipeBigCookie).setNoText(), new PageCrafting(5, FoodCrafting.recipeSubSandwich).setNoText(), new PageCrafting(6, FoodCrafting.recipeFrenchFry).setNoText(), new PageCrafting(7, FoodCrafting.recipeFrenchFries).setNoText(), new PageCrafting(8, FoodCrafting.recipeFishNChips).setNoText(), new PageCrafting(9, FoodCrafting.recipeCheese).setNoText(), new PageCrafting(10, FoodCrafting.recipePumpkinStew).setNoText(), new PageCrafting(11, FoodCrafting.recipeCarrotJuice).setNoText(), new PageCrafting(12, FoodCrafting.recipeSpaghetti).setNoText(), new PageCrafting(13, FoodCrafting.recipeNoodle).setNoText(), new PageCrafting(14, FoodCrafting.recipeChocolate).setNoText(), new PageCrafting(15, FoodCrafting.recipeChocolateCake).setNoText(), new PageCrafting(16, FoodCrafting.recipeToast).setNoText(), new PageFurnace(17, new ItemStack(InitItems.itemFoods, 1, TheFoods.BAGUETTE.ordinal())).setNoText(), new PageCrafting(18, FoodCrafting.recipeChocolateToast).setNoText(), new PageCrafting(1, FoodCrafting.recipePizza).setNoText()); + new BookletChapter("foods", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemFoods, 1, TheFoods.HAMBURGER.ordinal()), new PageCrafting(1, FoodCrafting.recipeBacon).setNoText(), new PageFurnace(2, new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE_BREAD.ordinal())).setNoText(), new PageCrafting(3, FoodCrafting.recipeHamburger).setNoText(), new PageCrafting(4, FoodCrafting.recipeBigCookie).setNoText(), new PageCrafting(5, FoodCrafting.recipeSubSandwich).setNoText(), new PageCrafting(6, FoodCrafting.recipeFrenchFry).setNoText(), new PageCrafting(7, FoodCrafting.recipeFrenchFries).setNoText(), new PageCrafting(8, FoodCrafting.recipeFishNChips).setNoText(), new PageCrafting(9, FoodCrafting.recipeCheese).setNoText(), new PageCrafting(10, FoodCrafting.recipePumpkinStew).setNoText(), new PageCrafting(11, FoodCrafting.recipeCarrotJuice).setNoText(), new PageCrafting(12, FoodCrafting.recipeSpaghetti).setNoText(), new PageCrafting(13, FoodCrafting.recipeNoodle).setNoText(), new PageCrafting(14, FoodCrafting.recipeChocolate).setNoText(), new PageCrafting(15, FoodCrafting.recipeChocolateCake).setNoText(), new PageCrafting(16, FoodCrafting.recipeToast).setNoText(), new PageFurnace(17, new ItemStack(InitItems.itemFoods, 1, TheFoods.BAGUETTE.ordinal())).setNoText(), new PageCrafting(18, FoodCrafting.recipeChocolateToast).setNoText(), new PageCrafting(1, FoodCrafting.recipePizza).setNoText()); new BookletChapter("leafBlower", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemLeafBlowerAdvanced), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLeafBlower).setNoText(), new PageCrafting(3, ItemCrafting.recipeLeafBlowerAdvanced).setNoText()).setImportant(); ArrayList aiotPages = new ArrayList(); aiotPages.add(new PageTextOnly(aiotPages.size()+1)); diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index f81363ca3..62bf54148 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -794,7 +794,6 @@ booklet.actuallyadditions.chapter.wings.name=Wings Of The Bats booklet.actuallyadditions.chapter.wings.text.1=Sometimes, bats will drop Wings. These wings can't really be used to fly, but that's just because they're not powerful enough. To make them more powerful, you can craft Wings Of The Bats. When you have these in your inventory, they will allow you to fly like in creative mode. booklet.actuallyadditions.chapter.foods.name=Foodstuffs -booklet.actuallyadditions.chapter.foods.text.1=Yes, this is Bacon. Don't try naming it Ellspeck. Please, just don't. booklet.actuallyadditions.chapter.leafBlower.name=Leaf Blowers booklet.actuallyadditions.chapter.leafBlower.text.1=The Leaf Blower can blow away tall grass, flowers and other stuff around you when you hold right-click. There is an Advanced Leaf Blower, which works like the basic one, except that it operates much faster and also breaks Leaves. @@ -854,7 +853,7 @@ booklet.actuallyadditions.chapter.laserRelays.text.5=The Laser Wrench's booklet.actuallyadditions.chapter.blackLotus.name=Black Lotus booklet.actuallyadditions.chapter.blackLotus.text.1=Think of this: You need to craft black wool, black clay or anything else that needs black dye but you are just guilty about killing so many innocent squids? Well, the Black Lotus is exactly the thing you need! Just look around in the wild a bit, and you will find one, then being able to craft some Black Dye that can be used instead of Ink Sacs so that you don't need to kill poor squids and L any longer. -booklet.actuallyadditions.chapter.blackLotus.text.2=No, not that one, Vaz +booklet.actuallyadditions.chapter.blackLotus.text.2=Do the lotus pose booklet.actuallyadditions.chapter.crystals.name=Crystals and Reconstructor booklet.actuallyadditions.chapter.crystals.text.1=The Atomic Reconstructor is used to craft Crystals, which are the main crafting ingredient in most items from Actually Additions. Upon being supplied with power, it shoots out a Laser. When the Laser hits a block, it will convert all surrounding items and blocks, provided they can be converted. When shooting a laser, it uses RF, but additional rates vary depending on the conversion. From 84c6549c866948858ba62b3012f709ec6aa9e049 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 14 Jul 2016 20:25:12 +0200 Subject: [PATCH 23/34] Make Player Data UUID dependent again because apparently that works correctly now~ --- .../mod/data/PlayerData.java | 27 ++++++++++--------- .../mod/event/CommonEvents.java | 6 ++--- .../mod/items/ItemLaserWrench.java | 2 +- .../mod/network/PacketHandler.java | 9 ++++--- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java index 036938e65..e3631917f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java @@ -14,52 +14,55 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import java.util.ArrayList; +import java.util.UUID; -//Yes, this is name based instead of UUID-based. -//It just works better this way because of vanilla quirks. Don't judge me. public final class PlayerData{ - public static PlayerSave getDataFromPlayer(String name){ + public static PlayerSave getDataFromPlayer(UUID id){ ArrayList data = WorldData.PLAYER_SAVE_DATA; //Get Data from existing data for(PlayerSave save : data){ - if(save.theName != null && save.theName.equals(name)){ + if(save.theId != null && save.theId.equals(id)){ return save; } } //Add Data if none is existant - PlayerSave aSave = new PlayerSave(name, new NBTTagCompound()); + PlayerSave aSave = new PlayerSave(id, new NBTTagCompound()); data.add(aSave); return aSave; } public static PlayerSave getDataFromPlayer(EntityPlayer player){ - return getDataFromPlayer(player.getName()); + return getDataFromPlayer(player.getUniqueID()); } public static class PlayerSave{ - public final String theName; + public final UUID theId; public NBTTagCompound theCompound; - public PlayerSave(String name, NBTTagCompound theCompound){ - this.theName = name; + public PlayerSave(UUID theId, NBTTagCompound theCompound){ + this.theId = theId; this.theCompound = theCompound; } public static PlayerSave fromNBT(NBTTagCompound compound){ - String name = compound.getString("Name"); + UUID theID = new UUID(compound.getLong("MostSignificant"), compound.getLong("LeastSignificant")); NBTTagCompound theCompound = compound.getCompoundTag("Tag"); - return new PlayerSave(name, theCompound); + return new PlayerSave(theID, theCompound); } public NBTTagCompound toNBT(){ NBTTagCompound compound = new NBTTagCompound(); - compound.setString("Name", this.theName); + compound.setLong("LeastSignificant", this.theId.getLeastSignificantBits()); + compound.setLong("MostSignificant", this.theId.getMostSignificantBits()); + compound.setTag("Tag", this.theCompound); + return compound; } } + } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java index d053430b2..0a53fc410 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java @@ -98,14 +98,14 @@ public class CommonEvents{ PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); if(!data.theCompound.hasNoTags()){ NBTTagCompound compound = new NBTTagCompound(); - compound.setString("Name", player.getName()); + compound.setUniqueId("UUID", player.getUniqueID()); compound.setTag("Data", data.theCompound); compound.setBoolean("Log", true); PacketHandler.theNetwork.sendTo(new PacketServerToClient(compound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), player); - ModUtil.LOGGER.info("Sending Player Data to player "+player.getName()+" with info "+data.theCompound+"."); + ModUtil.LOGGER.info("Sending Player Data to player "+player.getName()+" with UUID "+player.getUniqueID()+" with info "+data.theCompound+"."); } else{ - ModUtil.LOGGER.info("Not sending Player Data to player "+player.getName()+" because he doesn't have any."); + ModUtil.LOGGER.info("Not sending Player Data to player "+player.getName()+" with UUID "+player.getUniqueID()+" because he doesn't have any."); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 34d70f351..3e51a7ec5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -95,7 +95,7 @@ public class ItemLaserWrench extends ItemBase{ if(player instanceof EntityPlayerMP){ NBTTagCompound compound = new NBTTagCompound(); - compound.setString("Name", player.getName()); + compound.setUniqueId("UUID", player.getUniqueID()); compound.setTag("Data", save.theCompound); PacketHandler.theNetwork.sendTo(new PacketServerToClient(compound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java index 7501078da..a2e5de46e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java @@ -34,6 +34,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; import java.util.List; +import java.util.UUID; public final class PacketHandler{ @@ -99,10 +100,10 @@ public final class PacketHandler{ @SideOnly(Side.CLIENT) public void handleData(NBTTagCompound compound){ NBTTagCompound data = compound.getCompoundTag("Data"); - String name = compound.getString("Name"); - PlayerData.getDataFromPlayer(name).theCompound = data; + UUID id = compound.getUniqueId("UUID"); + PlayerData.getDataFromPlayer(id).theCompound = data; if(compound.getBoolean("Log")){ - ModUtil.LOGGER.info("Receiving Player Data for player "+name+" with info "+data+"."); + ModUtil.LOGGER.info("Receiving Player Data for current player with UUID "+id+" with info "+data+"."); } } }; @@ -136,7 +137,7 @@ public final class PacketHandler{ playerData.theCompound.merge(data); if(player instanceof EntityPlayerMP){ NBTTagCompound tag = new NBTTagCompound(); - tag.setString("Name", player.getName()); + tag.setUniqueId("UUID", player.getUniqueID()); tag.setTag("Data", playerData.theCompound); PacketHandler.theNetwork.sendTo(new PacketServerToClient(tag, PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); } From 64c152e8da9e812bcee6d9b22f1a9795c797527a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 14 Jul 2016 22:04:24 +0200 Subject: [PATCH 24/34] Tiny Torch. --- .../mod/blocks/BlockTinyTorch.java | 272 ++++++++++++++++++ .../mod/blocks/InitBlocks.java | 3 + .../mod/booklet/GuiBooklet.java | 4 +- .../mod/booklet/InitBooklet.java | 1 + .../mod/crafting/BlockCrafting.java | 15 + .../blockstates/blockTinyTorch.json | 9 + .../assets/actuallyadditions/lang/en_US.lang | 6 +- .../models/block/blockTinyTorch.json | 33 +++ .../models/block/blockTinyTorchWall.json | 36 +++ .../models/item/blockTinyTorch.json | 6 + .../textures/blocks/blockTinyTorch.png | Bin 0 -> 232 bytes 11 files changed, 383 insertions(+), 2 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTinyTorch.java create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTinyTorch.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTinyTorch.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTinyTorchWall.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTinyTorch.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockTinyTorch.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTinyTorch.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTinyTorch.java new file mode 100644 index 000000000..e1814226c --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTinyTorch.java @@ -0,0 +1,272 @@ +/* + * This file ("BlockTinyTorch.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.blocks; + +import com.google.common.base.Predicate; +import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; +import net.minecraft.block.Block; +import net.minecraft.block.BlockTorch; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nullable; +import java.util.Random; + +//Copied from BlockTorch. +//I have no idea what all of this means. +public class BlockTinyTorch extends BlockBase{ + + //Thanks to xdjackiexd for these. + //Man, I hate numbers. + private static final AxisAlignedBB STANDING_AABB = new AxisAlignedBB(0.4375D, 0.0D, 0.4375D, 0.5625D, 0.3125D, 0.5625D); + private static final AxisAlignedBB TORCH_NORTH_AABB = new AxisAlignedBB(0.4375D, 0.25D, 0.8125D, 0.5625D, 0.5625D, 1.0D); + private static final AxisAlignedBB TORCH_SOUTH_AABB = new AxisAlignedBB(0.4375D, 0.25D, 0.0D, 0.5625D, 0.5625D, 0.1875D); + private static final AxisAlignedBB TORCH_WEST_AABB = new AxisAlignedBB(0.8125D, 0.25D, 0.4375D, 1.0D, 0.5625D, 0.5625D); + private static final AxisAlignedBB TORCH_EAST_AABB = new AxisAlignedBB(0.0D, 0.25D, 0.4375D, 0.1875D, 0.5625D, 0.5625D); + + public BlockTinyTorch(String name){ + super(Material.CIRCUITS, name); + this.setDefaultState(this.blockState.getBaseState().withProperty(BlockTorch.FACING, EnumFacing.UP)); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.DECORATIONS); + + this.setHardness(0.0F); + this.setLightLevel(0.67F); + this.setSoundType(SoundType.WOOD); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + switch(state.getValue(BlockTorch.FACING)){ + case EAST: + return TORCH_EAST_AABB; + case WEST: + return TORCH_WEST_AABB; + case SOUTH: + return TORCH_SOUTH_AABB; + case NORTH: + return TORCH_NORTH_AABB; + default: + return STANDING_AABB; + } + } + + @Override + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){ + return NULL_AABB; + } + + @Override + public boolean isOpaqueCube(IBlockState state){ + return false; + } + + @Override + public boolean isFullCube(IBlockState state){ + return false; + } + + private boolean canPlaceOn(World worldIn, BlockPos pos){ + IBlockState state = worldIn.getBlockState(pos); + return state.isSideSolid(worldIn, pos, EnumFacing.UP) || state.getBlock().canPlaceTorchOnTop(state, worldIn, pos); + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos){ + for(EnumFacing enumfacing : BlockTorch.FACING.getAllowedValues()){ + if(this.canPlaceAt(worldIn, pos, enumfacing)){ + return true; + } + } + + return false; + } + + private boolean canPlaceAt(World worldIn, BlockPos pos, EnumFacing facing){ + BlockPos blockpos = pos.offset(facing.getOpposite()); + boolean flag = facing.getAxis().isHorizontal(); + return flag && worldIn.isSideSolid(blockpos, facing, true) || facing.equals(EnumFacing.UP) && this.canPlaceOn(worldIn, blockpos); + } + + @Override + public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer){ + if(this.canPlaceAt(worldIn, pos, facing)){ + return this.getDefaultState().withProperty(BlockTorch.FACING, facing); + } + else{ + for(EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL){ + if(worldIn.isSideSolid(pos.offset(enumfacing.getOpposite()), enumfacing, true)){ + return this.getDefaultState().withProperty(BlockTorch.FACING, enumfacing); + } + } + + return this.getDefaultState(); + } + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state){ + this.checkForDrop(worldIn, pos, state); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn){ + this.onNeighborChangeInternal(worldIn, pos, state); + } + + protected boolean onNeighborChangeInternal(World worldIn, BlockPos pos, IBlockState state){ + if(!this.checkForDrop(worldIn, pos, state)){ + return true; + } + else{ + EnumFacing enumfacing = state.getValue(BlockTorch.FACING); + EnumFacing.Axis axis = enumfacing.getAxis(); + EnumFacing enumfacing1 = enumfacing.getOpposite(); + boolean flag = false; + + if(axis.isHorizontal() && !worldIn.isSideSolid(pos.offset(enumfacing1), enumfacing, true)){ + flag = true; + } + else if(axis.isVertical() && !this.canPlaceOn(worldIn, pos.offset(enumfacing1))){ + flag = true; + } + + if(flag){ + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + return true; + } + else{ + return false; + } + } + } + + protected boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state){ + if(state.getBlock() == this && this.canPlaceAt(worldIn, pos, state.getValue(BlockTorch.FACING))){ + return true; + } + else{ + if(worldIn.getBlockState(pos).getBlock() == this){ + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + return false; + } + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand){ + if(rand.nextBoolean()){ + EnumFacing enumfacing = stateIn.getValue(BlockTorch.FACING); + double d0 = (double)pos.getX()+0.5D; + double d1 = (double)pos.getY()+0.4D; + double d2 = (double)pos.getZ()+0.5D; + + if(enumfacing.getAxis().isHorizontal()){ + EnumFacing enumfacing1 = enumfacing.getOpposite(); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0+0.35D*(double)enumfacing1.getFrontOffsetX(), d1+0.22D, d2+0.35D*(double)enumfacing1.getFrontOffsetZ(), 0.0D, 0.0D, 0.0D, new int[0]); + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0+0.35D*(double)enumfacing1.getFrontOffsetX(), d1+0.22D, d2+0.35D*(double)enumfacing1.getFrontOffsetZ(), 0.0D, 0.0D, 0.0D, new int[0]); + } + else{ + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0, d1, d2, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + } + } + + @Override + public IBlockState getStateFromMeta(int meta){ + IBlockState iblockstate = this.getDefaultState(); + + switch(meta){ + case 1: + iblockstate = iblockstate.withProperty(BlockTorch.FACING, EnumFacing.EAST); + break; + case 2: + iblockstate = iblockstate.withProperty(BlockTorch.FACING, EnumFacing.WEST); + break; + case 3: + iblockstate = iblockstate.withProperty(BlockTorch.FACING, EnumFacing.SOUTH); + break; + case 4: + iblockstate = iblockstate.withProperty(BlockTorch.FACING, EnumFacing.NORTH); + break; + case 5: + default: + iblockstate = iblockstate.withProperty(BlockTorch.FACING, EnumFacing.UP); + } + + return iblockstate; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer(){ + return BlockRenderLayer.CUTOUT; + } + + @Override + public int getMetaFromState(IBlockState state){ + int i = 0; + + switch(state.getValue(BlockTorch.FACING)){ + case EAST: + i = i | 1; + break; + case WEST: + i = i | 2; + break; + case SOUTH: + i = i | 3; + break; + case NORTH: + i = i | 4; + break; + case DOWN: + case UP: + default: + i = i | 5; + } + + return i; + } + + @Override + public IBlockState withRotation(IBlockState state, Rotation rot){ + return state.withProperty(BlockTorch.FACING, rot.rotate(state.getValue(BlockTorch.FACING))); + } + + @Override + public IBlockState withMirror(IBlockState state, Mirror mirrorIn){ + return state.withRotation(mirrorIn.toRotation(state.getValue(BlockTorch.FACING))); + } + + @Override + protected BlockStateContainer createBlockState(){ + return new BlockStateContainer(this, BlockTorch.FACING); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index cec55875d..3eb07618c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -124,9 +124,12 @@ public final class InitBlocks{ public static Block blockDisplayStand; public static Block blockShockSuppressor; + public static Block blockTinyTorch; + public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); + blockTinyTorch = new BlockTinyTorch("blockTinyTorch"); blockShockSuppressor = new BlockShockSuppressor("blockShockSuppressor"); blockDisplayStand = new BlockDisplayStand("blockDisplayStand"); blockPlayerInterface = new BlockPlayerInterface("blockPlayerInterface"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 4ede3c0ea..41055f70f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -405,15 +405,17 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ BookletUtils.openLastBookPage(this, data.theCompound.getCompoundTag("BookletData")); } } + this.shouldSaveDataNextClose = false; } else{ //Open forced entry BookletUtils.openIndexEntry(this, ItemBooklet.forcedEntry.entry, ItemBooklet.forcedEntry.pageInIndex, true); BookletUtils.openChapter(this, ItemBooklet.forcedEntry.chapter, ItemBooklet.forcedEntry.page); ItemBooklet.forcedEntry = null; + + this.shouldSaveDataNextClose = true; } - this.shouldSaveDataNextClose = false; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 190a828bf..6798cff12 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -88,6 +88,7 @@ public final class InitBooklet{ new BookletChapter("hairBalls", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemHairyBall), new PagePicture(1, "pageFurBalls", 110).setStacks(new ItemStack(InitItems.itemHairyBall)), new PageTextOnly(2)).setSpecial(); new BookletChapter("blackLotus", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockBlackLotus), new PageTextOnly(1).setStacks(new ItemStack(InitBlocks.blockBlackLotus)), new PageCrafting(2, ItemCrafting.recipeBlackDye)); new BookletChapter("waterBowl", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemWaterBowl), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemWaterBowl))); + new BookletChapter("tinyTorch", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTinyTorch), new PageCrafting(1, BlockCrafting.recipesTinyTorch).setPageStacksWildcard()).setSpecial(); //No RF Using Blocks new BookletChapter("itemStorage", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockLaserRelayItemWhitelist), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipeLaserRelayItem).setNoText().setPageStacksWildcard(), new PageCrafting(4, BlockCrafting.recipeLaserRelayItemWhitelist).setNoText().setPageStacksWildcard(), new PageCrafting(5, BlockCrafting.recipeItemInterface).setNoText()).setImportant(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index 5b7da4b1e..6205c3b20 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -90,9 +90,24 @@ public final class BlockCrafting{ public static IRecipe recipePlayerInterface; public static IRecipe recipeDisplayStand; public static IRecipe recipeShockSuppressor; + public static IRecipe[] recipesTinyTorch = new IRecipe[2]; public static void init(){ + //Tiny Torch + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockTinyTorch, 2), + "C", + "W", + 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.TINY_COAL.ordinal()), + 'W', "stickWood")); + recipesTinyTorch[0] = RecipeUtil.lastIRecipe(); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockTinyTorch, 2), + "C", + "W", + 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.TINY_CHAR.ordinal()), + 'W', "stickWood")); + recipesTinyTorch[1] = RecipeUtil.lastIRecipe(); + //Firework Box if(ConfigCrafting.FIREWORK_BOX.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFireworkBox), diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTinyTorch.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTinyTorch.json new file mode 100644 index 000000000..9d048ab3a --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockTinyTorch.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "actuallyadditions:blockTinyTorch" }, + "facing=east": { "model": "actuallyadditions:blockTinyTorchWall" }, + "facing=south": { "model": "actuallyadditions:blockTinyTorchWall", "y": 90 }, + "facing=west": { "model": "actuallyadditions:blockTinyTorchWall", "y": 180 }, + "facing=north": { "model": "actuallyadditions:blockTinyTorchWall", "y": 270 } + } +} diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 62bf54148..c96264391 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -215,6 +215,7 @@ tile.actuallyadditions.blockImpureIron.name=Impure Iron tile.actuallyadditions.blockBookletStand.name=Wall-Mount Manual tile.actuallyadditions.blockDisplayStand.name=Display Stand tile.actuallyadditions.blockShockSuppressor.name=Shock Absorber +tile.actuallyadditions.blockTinyTorch.name=Tiny Torch #ESD tile.actuallyadditions.blockInputter.name=ESD @@ -928,4 +929,7 @@ booklet.actuallyadditions.chapter.videoGuide.page.1.button=Watch Video booklet.actuallyadditions.chapter.shockSuppressor.name=Shock Absorber booklet.actuallyadditions.chapter.shockSuppressor.text.1=The Shock Absorber is a block that, when supplied with RF, it will protect an area of up to blocks around it from any type of Explosion, be it ghasts, TNT or creepers. Every block that is protected will result in a loss of RF. -booklet.actuallyadditions.chapter.shockSuppressor.text.2=Credit where credit is due: Or something like that. Anyways, this thing was thought up and suggested to me by praetoras. Thanks for that brilliant idea! What's a fourth wall..? \ No newline at end of file +booklet.actuallyadditions.chapter.shockSuppressor.text.2=Credit where credit is due: Or something like that. Anyways, this thing was thought up and suggested to me by praetoras. Thanks for that brilliant idea! What's a fourth wall..? + +booklet.actuallyadditions.chapter.tinyTorch.name=Tiny Torch +booklet.actuallyadditions.chapter.tinyTorch.text.1=Yea. \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTinyTorch.json b/src/main/resources/assets/actuallyadditions/models/block/blockTinyTorch.json new file mode 100644 index 000000000..a12fd8055 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockTinyTorch.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "actuallyadditions:blocks/blockTinyTorch", + "torch": "actuallyadditions:blocks/blockTinyTorch" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 5, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" }, + "up": { "uv": [ 7, 11, 9, 13 ], "texture": "#torch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } + } + } + ] +} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTinyTorchWall.json b/src/main/resources/assets/actuallyadditions/models/block/blockTinyTorchWall.json new file mode 100644 index 000000000..08da03738 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockTinyTorchWall.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "actuallyadditions:blocks/blockTinyTorch", + "torch": "actuallyadditions:blocks/blockTinyTorch" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 8.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" }, + "up": { "uv": [ 7, 11, 9, 13 ], "texture": "#torch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } + } + } + ] +} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTinyTorch.json b/src/main/resources/assets/actuallyadditions/models/item/blockTinyTorch.json new file mode 100644 index 000000000..c7d979fb1 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/blockTinyTorch.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:blocks/blockTinyTorch" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockTinyTorch.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockTinyTorch.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb48e1c9a8fbf38c72366d6f5c107efbcc1ff7b GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dh+L6~vJ#O${~L5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33J0gO<&M|Nmb)cymNHv-{|O|B=5~-+3S7OUJhV mxx6Ww#s^}&W%?O;co?P{s;=ko3T^?~$l&Sf=d#Wzp$PyMq(xf* literal 0 HcmV?d00001 From be0270386e06d0b298358a18e5c5fca3c8de3062 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 17 Jul 2016 12:48:59 +0200 Subject: [PATCH 25/34] Added zh_CN.lang to 1.10.2 branch. Holy motherfreaking jesus, how do you do these things, people. Awesome thing. --- .../assets/actuallyadditions/lang/zh_CN.lang | 924 ++++++++++++++++++ 1 file changed, 924 insertions(+) create mode 100644 src/main/resources/assets/actuallyadditions/lang/zh_CN.lang diff --git a/src/main/resources/assets/actuallyadditions/lang/zh_CN.lang b/src/main/resources/assets/actuallyadditions/lang/zh_CN.lang new file mode 100644 index 000000000..d7e13e251 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/lang/zh_CN.lang @@ -0,0 +1,924 @@ +#General +itemGroup.actuallyadditions=实用拓展 +achievement.page.actuallyadditions=实用拓展 +actuallyadditions.lolWutHowUDoDis.name=这东西出bug了。请扔了它。 + +#Fluids +fluid.actuallyadditions.oil=原油 +fluid.actuallyadditions.canolaoil=菜籽油 + +#Banners +item.banner.actuallyadditionsBook.black=黑色实用拓展手册图案 +item.banner.actuallyadditionsBook.red=红色实用拓展手册图案 +item.banner.actuallyadditionsBook.green=绿色实用拓展手册图案 +item.banner.actuallyadditionsBook.brown=棕色实用拓展手册图案 +item.banner.actuallyadditionsBook.blue=蓝色实用拓展手册图案 +item.banner.actuallyadditionsBook.purple=紫色实用拓展手册图案 +item.banner.actuallyadditionsBook.cyan=青色实用拓展手册图案 +item.banner.actuallyadditionsBook.silver=淡灰色实用拓展手册图案 +item.banner.actuallyadditionsBook.gray=灰色实用拓展手册图案 +item.banner.actuallyadditionsBook.pink=粉色实用拓展手册图案 +item.banner.actuallyadditionsBook.lime=黄绿色实用拓展手册图案 +item.banner.actuallyadditionsBook.yellow=黄色实用拓展手册图案 +item.banner.actuallyadditionsBook.lightBlue=淡蓝色实用拓展手册图案 +item.banner.actuallyadditionsBook.magenta=品红色实用拓展手册图案 +item.banner.actuallyadditionsBook.orange=橙色实用拓展手册图案 +item.banner.actuallyadditionsBook.white=白色实用拓展手册图案 + +item.banner.actuallyadditionsPhanCon.black=黑色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.red=红色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.green=绿色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.brown=棕色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.blue=蓝色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.purple=紫色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.cyan=青色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.silver=浅灰色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.gray=灰色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.pink=粉色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.lime=黄绿色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.yellow=黄色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.lightBlue=淡蓝色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.magenta=品红色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.orange=橙色幻灵连接器图案 +item.banner.actuallyadditionsPhanCon.white=白色幻灵连接器图案 + +item.banner.actuallyadditionsLeafBlo.black=黑色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.red=红色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.green=绿色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.brown=棕色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.blue=蓝色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.purple=紫色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.cyan=青色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.silver=浅灰色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.gray=灰色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.pink=粉色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.lime=黄绿色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.yellow=黄色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.lightBlue=淡蓝色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.magenta=品红色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.orange=橙色吹叶器图案 +item.banner.actuallyadditionsLeafBlo.white=白色吹叶器图案 + +item.banner.actuallyadditionsDrill.black=黑色手钻图案 +item.banner.actuallyadditionsDrill.red=红色手钻图案 +item.banner.actuallyadditionsDrill.green=绿色手钻图案 +item.banner.actuallyadditionsDrill.brown=棕色手钻图案 +item.banner.actuallyadditionsDrill.blue=蓝色手钻图案 +item.banner.actuallyadditionsDrill.purple=紫色手钻图案 +item.banner.actuallyadditionsDrill.cyan=青色手钻图案 +item.banner.actuallyadditionsDrill.silver=浅灰色手钻图案 +item.banner.actuallyadditionsDrill.gray=灰色手钻图案 +item.banner.actuallyadditionsDrill.pink=粉色手钻图案 +item.banner.actuallyadditionsDrill.lime=黄绿色手钻图案 +item.banner.actuallyadditionsDrill.yellow=黄色手钻图案 +item.banner.actuallyadditionsDrill.lightBlue=淡蓝色手钻图案 +item.banner.actuallyadditionsDrill.magenta=品红色手钻图案 +item.banner.actuallyadditionsDrill.orange=橙色手钻图案 +item.banner.actuallyadditionsDrill.white=白色手钻图案 + +#NEI Integration +container.nei.actuallyadditions.crushing.name=磨粉机 +container.nei.actuallyadditions.crushingDouble.name=两仓磨粉机 +container.nei.actuallyadditions.ballOfHair.name=毛球 +container.nei.actuallyadditions.compost.name=堆肥机 +container.nei.actuallyadditions.furnaceDouble.name=两仓熔炉 +container.nei.actuallyadditions.treasureChest.name=藏宝箱 +container.nei.actuallyadditions.treasureChest.info=可以开出 +container.nei.actuallyadditions.coffee.name=咖啡制造机 +container.nei.actuallyadditions.coffee.special=特殊效果 +container.nei.actuallyadditions.coffee.maxAmount=最大加入量 +container.nei.actuallyadditions.coffee.extra.milk=+ 01\:00,-1 Level +container.nei.actuallyadditions.reconstructor.name=原子再构机 + +container.nei.actuallyadditions.booklet.name=实用拓展手册 +container.nei.actuallyadditions.booklet.header=实用拓展手册 说道: +container.nei.actuallyadditions.booklet.noText=这里空无一物 ! 但这没什么大不了的。只需点击底部按钮,即可继续浏览其他条目 ! + +#Damage Sources +death.actuallyadditions.atomicReconstructor.1=%s 被原子重组了。 +death.actuallyadditions.atomicReconstructor.2=原子再构机发现了它的目标 %s。 +death.actuallyadditions.atomicReconstructor.3=经过原子重组的 %s 看起来再也站不起来了。 +death.actuallyadditions.atomicReconstructor.4=%s 不该抗下那发原子重组炮! +death.actuallyadditions.atomicReconstructor.5=%s 应该是吃了一发重组炮。 + +#Blocks +tile.actuallyadditions.blockCompost.name=堆肥机 +tile.actuallyadditions.blockMiscOreBlackQuartz.name=焦黑石英矿 +tile.actuallyadditions.blockMiscBlackQuartz.name=焦黑石英块 +tile.actuallyadditions.blockMiscBlackQuartzChiseled.name=錾制焦黑石英 +tile.actuallyadditions.blockMiscBlackQuartzPillar.name=焦黑石英柱 +tile.actuallyadditions.blockFeeder.name=自动饲育机 +tile.actuallyadditions.blockGiantChest.name=小型板条箱 +tile.actuallyadditions.blockGiantChestMedium.name=中型板条箱 +tile.actuallyadditions.blockGiantChestLarge.name=大型板条箱 +tile.actuallyadditions.blockGrinder.name=磨粉机 +tile.actuallyadditions.blockGrinderDouble.name=两仓磨粉机 +tile.actuallyadditions.blockFurnaceDouble.name=两仓熔炉 +tile.actuallyadditions.blockFishingNet.name=渔网 +tile.actuallyadditions.blockFurnaceSolar.name=太阳能板 +tile.actuallyadditions.blockHeatCollector.name=热能发电机 +tile.actuallyadditions.blockItemRepairer.name=物品修理机 +tile.actuallyadditions.blockMiscWoodCasing.name=木制外壳 +tile.actuallyadditions.blockGreenhouseGlass.name=温室玻璃 +tile.actuallyadditions.blockEnergizer.name=充能站 +tile.actuallyadditions.blockEnervator.name=释能站 +tile.actuallyadditions.blockRice.name=水稻 +tile.actuallyadditions.blockMiscCharcoal.name=木炭块 +tile.actuallyadditions.blockCoalGenerator.name=煤炭发电机 +tile.actuallyadditions.blockLampPowerer.name=灯具控制器 +tile.actuallyadditions.blockColoredLampWhite.name=白色灯具 +tile.actuallyadditions.blockColoredLampOrange.name=橙色灯具 +tile.actuallyadditions.blockColoredLampMagenta.name=品红灯具 +tile.actuallyadditions.blockColoredLampYellow.name=黄色灯具 +tile.actuallyadditions.blockColoredLampLightBlue.name=浅蓝色灯具 +tile.actuallyadditions.blockColoredLampBlue.name=蓝色灯具 +tile.actuallyadditions.blockColoredLampGray.name=灰色灯具 +tile.actuallyadditions.blockColoredLampLightGray.name=浅灰色灯具 +tile.actuallyadditions.blockColoredLampGreen.name=绿色灯具 +tile.actuallyadditions.blockColoredLampBlack.name=黑色灯具 +tile.actuallyadditions.blockColoredLampBrown.name=棕色灯具 +tile.actuallyadditions.blockColoredLampRed.name=红色灯具 +tile.actuallyadditions.blockColoredLampLime.name=黄绿色灯具 +tile.actuallyadditions.blockColoredLampPink.name=粉色灯具 +tile.actuallyadditions.blockColoredLampCyan.name=青色灯具 +tile.actuallyadditions.blockColoredLampPurple.name=紫色灯具 +tile.actuallyadditions.blockPhantomface.name=幻灵接口 +tile.actuallyadditions.blockPlayerInterface.name=玩家接口 +tile.actuallyadditions.blockPhantomEnergyface.name=幻灵能量接口 +tile.actuallyadditions.blockPhantomRedstoneface.name=幻灵红石接口 +tile.actuallyadditions.blockPhantomLiquiface.name=幻灵流体接口 +tile.actuallyadditions.blockPhantomPlacer.name=幻灵方块放置器 +tile.actuallyadditions.blockPhantomBreaker.name=幻灵方块破坏器 +tile.actuallyadditions.blockLavaFactoryController.name=岩浆工厂控制器 +tile.actuallyadditions.blockMiscLavaFactoryCase.name=岩浆工厂外墙 +tile.actuallyadditions.blockFluidPlacer.name=流体成型器 +tile.actuallyadditions.blockFluidCollector.name=流体吸收器 +tile.actuallyadditions.blockPhantomBooster.name=幻灵增幅器 +tile.actuallyadditions.blockCoffee.name=咖啡 +tile.actuallyadditions.blockWildCanola.name=野生油菜 +tile.actuallyadditions.blockWildRice.name=野生水稻 +tile.actuallyadditions.blockWildCoffee.name=野生咖啡 +tile.actuallyadditions.blockWildFlax.name=野生亚麻 +tile.actuallyadditions.blockTestifiBucksGreenWall.name=装饰用绿色石英方块 +tile.actuallyadditions.blockTestifiBucksWhiteWall.name=装饰用石英 +tile.actuallyadditions.blockTestifiBucksGreenStairs.name=装饰用绿色石英楼梯 +tile.actuallyadditions.blockTestifiBucksWhiteStairs.name=装饰用石英楼梯 +tile.actuallyadditions.blockTestifiBucksGreenSlab.name=装饰用绿色石英台阶 +tile.actuallyadditions.blockTestifiBucksWhiteSlab.name=装饰用石英台阶 +tile.actuallyadditions.blockCanola.name=油菜 +tile.actuallyadditions.blockTreasureChest.name=藏宝箱 +tile.actuallyadditions.blockCanolaPress.name=油菜压榨机 +tile.actuallyadditions.blockFermentingBarrel.name=发酵桶 +tile.actuallyadditions.blockCanolaOil.name=菜籽油 +tile.actuallyadditions.blockOil.name=原油 +tile.actuallyadditions.blockMiscEnderpearl.name=末影珍珠块 +tile.actuallyadditions.blockOilGenerator.name=原油发电机 +tile.actuallyadditions.blockBreaker.name=方块破坏器 +tile.actuallyadditions.blockPlacer.name=方块放置器 +tile.actuallyadditions.blockDropper.name=精准自动投掷器 +tile.actuallyadditions.blockMiscEnderCasing.name=末影外壳 +tile.actuallyadditions.blockFlax.name=亚麻 +tile.actuallyadditions.blockCoffeeMachine.name=咖啡制造机 +tile.actuallyadditions.blockXPSolidifier.name=经验固化机 +tile.actuallyadditions.blockSmileyCloud.name=微笑云朵 +tile.actuallyadditions.blockLeafGenerator.name=咀叶发电机 +tile.actuallyadditions.blockDirectionalBreaker.name=长距离方块破坏器 +tile.actuallyadditions.blockRangedCollector.name=物品吸收器 +tile.actuallyadditions.blockLaserRelay.name=激光中继器 +tile.actuallyadditions.blockMiscIronCasing.name=铁制外壳 +tile.actuallyadditions.blockBlackLotus.name=黑莲花 +tile.actuallyadditions.blockTestifiBucksWhiteFence.name=装饰用石英围墙 +tile.actuallyadditions.blockTestifiBucksGreenFence.name=装饰用绿色石英围墙 +tile.actuallyadditions.blockCrystalRed.name=红石水晶块 +tile.actuallyadditions.blockCrystalBlue.name=青金石水晶块 +tile.actuallyadditions.blockCrystalLightBlue.name=钻石水晶块 +tile.actuallyadditions.blockCrystalGreen.name=绿宝石水晶块 +tile.actuallyadditions.blockCrystalBlack.name=煤晶块 +tile.actuallyadditions.blockCrystalWhite.name=铁晶块 +tile.actuallyadditions.blockMiner.name=垂直挖矿机 +tile.actuallyadditions.blockFireworkBox.name=烟花发射器 +tile.actuallyadditions.blockQuartzWall.name=焦黑石英围墙 +tile.actuallyadditions.blockQuartzStair.name=焦黑石英楼梯 +tile.actuallyadditions.blockQuartzSlab.name=焦黑石英台阶 +tile.actuallyadditions.blockChiseledQuartzWall.name=錾制焦黑石英围墙 +tile.actuallyadditions.blockChiseledQuartzStair.name=錾制焦黑石英楼梯 +tile.actuallyadditions.blockChiseledQuartzSlab.name=錾制焦黑石英台阶 +tile.actuallyadditions.blockPillarQuartzWall.name=焦黑石英柱围墙 +tile.actuallyadditions.blockPillarQuartzStair.name=焦黑石英柱楼梯 +tile.actuallyadditions.blockPillarQuartzSlab.name=焦黑石英柱台阶 +tile.actuallyadditions.blockLaserRelayItem.name=Item Laser Relay +tile.actuallyadditions.blockLaserRelayItemWhitelist.name=Advanced Item Laser Relay +tile.actuallyadditions.blockItemViewer.name=Item Interface +tile.actuallyadditions.blockImpureIron.name=Impure Iron +tile.actuallyadditions.blockBookletStand.name=Wall-Mount Manual +tile.actuallyadditions.blockDisplayStand.name=物品展示架 +tile.actuallyadditions.blockShockSuppressor.name=Shock Absorber + +#ESD +tile.actuallyadditions.blockInputter.name=物流输导机 +tile.actuallyadditions.blockInputterAdvanced.name=高级物流输导机 +tile.actuallyadditions.blockInputter.add.1.name=Ellpeck的角子机 +tile.actuallyadditions.blockInputter.add.2.name=永恒系统老大哥(Ethereal System Dude) +tile.actuallyadditions.blockInputter.add.3.name=能量分配器(Energy Stuff Distributor) +tile.actuallyadditions.blockInputter.add.4.name=既存物品捐赠者(Extsing Stuff Donator) +tile.actuallyadditions.blockInputter.add.5.name=更多实用盗窃设备 (ExtraUtils Stealing Device) +tile.actuallyadditions.blockInputter.add.6.name=先代酱汁运送专家 (Experienced Sauce Deriver) +tile.actuallyadditions.blockInputter.add.7.name=很棒的意大利面条甜点(Excellent Spaghetti Dessert) +tile.actuallyadditions.blockInputter.add.8.name=非凡样品送货员(Extraordinary Sample Deliverer) +tile.actuallyadditions.blockInputter.add.9.name=快递送货上门的甜甜圈(Express Sending Doughnut) +tile.actuallyadditions.blockInputter.add.10.name=糖制驱邪匕首(Expelling Sugar Dagger) +tile.actuallyadditions.blockInputter.add.11.name=超长固化解离(Extra-Long Solidifying Dissociation) +tile.actuallyadditions.blockInputter.add.12.name=精力充沛的独舞者(Energetic Solo Dancer) +tile.actuallyadditions.blockInputter.add.13.name=没效率的半吊子(Efficient Sucking Dilettant) +tile.actuallyadditions.blockInputter.add.14.name=极限挖沙机 +tile.actuallyadditions.blockInputter.add.15.name=了结严肃的女儿(Ending Serious Daughter) + +#Reconstructor +tile.actuallyadditions.blockAtomicReconstructor.name=原子再构机 + +tile.actuallyadditions.blockAtomicReconstructor.info.1.1=分子的 +tile.actuallyadditions.blockAtomicReconstructor.info.1.2=物质的 +tile.actuallyadditions.blockAtomicReconstructor.info.1.3=夸克的 +tile.actuallyadditions.blockAtomicReconstructor.info.1.4=自动 +tile.actuallyadditions.blockAtomicReconstructor.info.1.5=一丁点 +tile.actuallyadditions.blockAtomicReconstructor.info.1.6=部件 +tile.actuallyadditions.blockAtomicReconstructor.info.1.7=食物Vittle +tile.actuallyadditions.blockAtomicReconstructor.info.1.8=新型材料Transmaterial +tile.actuallyadditions.blockAtomicReconstructor.info.1.9=部分 +tile.actuallyadditions.blockAtomicReconstructor.info.1.10=空间 +tile.actuallyadditions.blockAtomicReconstructor.info.1.11=不透气的 +tile.actuallyadditions.blockAtomicReconstructor.info.1.12=多次元 + +tile.actuallyadditions.blockAtomicReconstructor.info.2.1=Recombobulizer +tile.actuallyadditions.blockAtomicReconstructor.info.2.2=Shiftulator移位计算器 +tile.actuallyadditions.blockAtomicReconstructor.info.2.3=再重组器 +tile.actuallyadditions.blockAtomicReconstructor.info.2.4=调制器 +tile.actuallyadditions.blockAtomicReconstructor.info.2.5=Moleculizer +tile.actuallyadditions.blockAtomicReconstructor.info.2.6=Modificulator +tile.actuallyadditions.blockAtomicReconstructor.info.2.7=充能器 +tile.actuallyadditions.blockAtomicReconstructor.info.2.8=Atomizer +tile.actuallyadditions.blockAtomicReconstructor.info.2.9=Makerator +tile.actuallyadditions.blockAtomicReconstructor.info.2.10=互换器 +tile.actuallyadditions.blockAtomicReconstructor.info.2.11=交换器 +tile.actuallyadditions.blockAtomicReconstructor.info.2.12=替换器 +tile.actuallyadditions.blockAtomicReconstructor.info.2.13=微分器 +tile.actuallyadditions.blockAtomicReconstructor.info.2.14=接受器 + +#Items +item.actuallyadditions.itemDrill.name=手钻 +item.actuallyadditions.itemFoodRice.name=稻米 +item.actuallyadditions.itemFoodDoughnut.name=甜甜圈 +item.actuallyadditions.itemMiscRiceDough.name=大米面团 +item.actuallyadditions.itemFoodRiceBread.name=大米面包 +item.actuallyadditions.itemRiceSeed.name=水稻种子 +item.actuallyadditions.itemMiscTinyCoal.name=小块煤炭 +item.actuallyadditions.itemMiscTinyCharcoal.name=小块木炭 +item.actuallyadditions.itemMiscRiceSlime.name=浆糊球 +item.actuallyadditions.itemBattery.name=一阶电池 +item.actuallyadditions.itemBatteryDouble.name=二阶电池 +item.actuallyadditions.itemBatteryTriple.name=三阶电池 +item.actuallyadditions.itemBatteryQuadruple.name=四阶电池 +item.actuallyadditions.itemBatteryQuintuple.name=五阶电池 +item.actuallyadditions.itemGrowthRing.name=生长指环 +item.actuallyadditions.itemWaterRemovalRing.name=排液指环 +item.actuallyadditions.itemSuctionRing.name=磁力指环 +item.actuallyadditions.itemBucketCanolaOil.name=菜籽油桶 +item.actuallyadditions.itemBucketOil.name=原油桶 +item.actuallyadditions.itemWingsOfTheBats.name=蝙蝠的翅膀 +item.actuallyadditions.itemMiscBatWing.name=蝙蝠之翼 +item.actuallyadditions.woodenPaxel.name=木制全能工具 +item.actuallyadditions.stonePaxel.name=石制全能工具 +item.actuallyadditions.ironPaxel.name=铁制全能工具 +item.actuallyadditions.goldPaxel.name=金制全能工具 +item.actuallyadditions.diamondPaxel.name=钻石全能工具 +item.actuallyadditions.emeraldPaxel.name=绿宝石全能工具 +item.actuallyadditions.obsidianPaxel.name=黑曜石全能工具 +item.actuallyadditions.quartzPaxel.name=焦黑石英全能工具 +item.actuallyadditions.paxelTFCopper.name=铜制全能工具 +item.actuallyadditions.paxelTFTin.name=锡制全能工具 +item.actuallyadditions.paxelTFLead.name=铅制全能工具 +item.actuallyadditions.paxelTFSilver.name=银制全能工具 +item.actuallyadditions.paxelTFElectrum.name=琥珀金全能工具 +item.actuallyadditions.paxelTFNickel.name=镍制全能工具 +item.actuallyadditions.paxelTFBronze.name=青铜全能工具 +item.actuallyadditions.paxelTFPlatinum.name=铂制全能工具 +item.actuallyadditions.paxelTFInvar.name=因瓦合金全能工具 +item.actuallyadditions.paxelMTObsidian.name=黑曜石全能工具 +item.actuallyadditions.paxelMTGlowstone.name=萤石全能工具 +item.actuallyadditions.paxelMTLapisLazuli.name=青金石全能工具 +item.actuallyadditions.paxelMTOsmium.name=锇制全能工具 +item.actuallyadditions.paxelMTBronze.name=青铜全能工具 +item.actuallyadditions.paxelMTSteel.name=钢制全能工具 +item.actuallyadditions.paxelSOadamantium.name=亚德曼金属全能工具 +item.actuallyadditions.paxelSOcopper.name=铜制全能工具 +item.actuallyadditions.paxelSOtin.name=锡制全能工具 +item.actuallyadditions.paxelSOonyx.name=黑玛瑙全能工具 +item.actuallyadditions.paxelSOmythril.name=秘银全能工具 +item.actuallyadditions.itemPhantomConnector.name=幻灵连接器 +item.actuallyadditions.itemMiscCup.name=空杯子 +item.actuallyadditions.itemCoffee.name=一杯咖啡 +item.actuallyadditions.itemCoffeeSeed.name=咖啡种子 +item.actuallyadditions.itemCoffeeBeans.name=咖啡豆 +item.actuallyadditions.itemCanolaSeed.name=油菜种子 +item.actuallyadditions.itemMiscCanola.name=油菜 +item.actuallyadditions.itemResonantRice.name=谐振稻米 +item.actuallyadditions.itemDrillUpgradeSpeed.name=钻头急迫升级 I +item.actuallyadditions.itemDrillUpgradeSpeedII.name=钻头急迫升级 II +item.actuallyadditions.itemDrillUpgradeSpeedIII.name=钻头急迫升级 III +item.actuallyadditions.itemDrillUpgradeSilkTouch.name=钻头精准升级 +item.actuallyadditions.itemDrillUpgradeFortune.name=钻头时运升级 I +item.actuallyadditions.itemDrillUpgradeFortuneII.name=钻头时运升级 II (效果等同时运 III\!) +item.actuallyadditions.itemDrillUpgradeBlockPlacing.name=钻头方块放置升级 +item.actuallyadditions.itemDrillUpgradeThreeByThree.name=钻头范围采掘升级 I +item.actuallyadditions.itemDrillUpgradeFiveByFive.name=钻头范围采掘升级 II +item.actuallyadditions.itemMiscMashedFood.name=糊状食物 +item.actuallyadditions.itemFertilizer.name=肥料 +item.actuallyadditions.itemMiscDough.name=面团 +item.actuallyadditions.itemMiscPaperCone.name=纸杯 +item.actuallyadditions.itemMiscKnifeBlade.name=刀刃 +item.actuallyadditions.itemMiscKnifeHandle.name=刀柄 +item.actuallyadditions.itemMiscBlackQuartz.name=焦黑石英 +item.actuallyadditions.itemMiscRing.name=普通指环 +item.actuallyadditions.itemTeleStaff.name=传送权杖 +item.actuallyadditions.itemJamCuBaRa.name=CuBaRa果酱 +item.actuallyadditions.itemJamGraKiBa.name=GraKiBa果酱 +item.actuallyadditions.itemJamPlApLe.name=PlApLe果酱 +item.actuallyadditions.itemJamChApCi.name=ChApCi果酱 +item.actuallyadditions.itemJamHoMeKi.name=HoMeKi果酱 +item.actuallyadditions.itemJamHoMeCo.name=HoMeCo果酱 +item.actuallyadditions.itemJamPiCo.name=PiCo果酱 +item.actuallyadditions.itemHairyBall.name=毛球 +item.actuallyadditions.itemLeafBlower.name=吹叶器 +item.actuallyadditions.itemLeafBlowerAdvanced.name=高级吹叶器 +item.actuallyadditions.itemKnife.name=小刀 +item.actuallyadditions.itemPickaxeEmerald.name=绿宝石手斧 +item.actuallyadditions.itemAxeEmerald.name=绿宝石斧 +item.actuallyadditions.itemShovelEmerald.name=绿宝石锹 +item.actuallyadditions.itemHoeEmerald.name=绿宝石锄 +item.actuallyadditions.itemSwordEmerald.name=绿宝石剑 +item.actuallyadditions.itemPickaxeQuartz.name=焦黑石英手斧 +item.actuallyadditions.itemAxeQuartz.name=焦黑石英斧 +item.actuallyadditions.itemShovelQuartz.name=焦黑石英锹 +item.actuallyadditions.itemHoeQuartz.name=焦黑石英锄 +item.actuallyadditions.itemSwordQuartz.name=焦黑石英剑 +item.actuallyadditions.itemPickaxeObsidian.name=黑曜石手斧 +item.actuallyadditions.itemAxeObsidian.name=黑曜石斧 +item.actuallyadditions.itemShovelObsidian.name=黑曜石锹 +item.actuallyadditions.itemHoeObsidian.name=黑曜石锄 +item.actuallyadditions.itemSwordObsidian.name=黑曜石剑 +item.actuallyadditions.itemCrafterOnAStick.name=手持工作台 +item.actuallyadditions.itemFoodBaguette.name=法国长面包 +item.actuallyadditions.itemFoodPizza.name=匹萨 +item.actuallyadditions.itemFoodHamburger.name=汉堡包 +item.actuallyadditions.itemFoodBigCookie.name=大块曲奇 +item.actuallyadditions.itemFoodSubmarineSandwich.name=海鲜三明治 +item.actuallyadditions.itemFoodToast.name=吐司面包 +item.actuallyadditions.itemFoodChocolateToast.name=巧克力吐司面包 +item.actuallyadditions.itemFoodChocolate.name=一 +item.actuallyadditions.itemFoodChocolateCake.name=巧克力蛋糕 +item.actuallyadditions.itemFoodNoodle.name=面条 +item.actuallyadditions.itemFoodSpaghetti.name=意大利面 +item.actuallyadditions.itemFoodFrenchFry.name=炸薯条 +item.actuallyadditions.itemFoodFrenchFries.name=大杯炸薯条 +item.actuallyadditions.itemFoodFishNChips.name=海鲜炸薯条 +item.actuallyadditions.itemFoodCarrotJuice.name=萝卜汁 +item.actuallyadditions.itemFoodPumpkinStew.name=南瓜汤 +item.actuallyadditions.itemFoodCheese.name=奶酪 +item.actuallyadditions.itemMiscCoil.name=基础线圈 +item.actuallyadditions.itemMiscCoilAdvanced.name=高级线圈 +item.actuallyadditions.itemPotionRing.name=药水指环 +item.actuallyadditions.itemPotionRingAdvanced.name=高级药水指环 +item.actuallyadditions.itemSolidifiedExperience.name=固化经验 +item.actuallyadditions.itemDustIron.name=铁粉 +item.actuallyadditions.itemDustGold.name=金粉 +item.actuallyadditions.itemDustDiamond.name=钻石粉 +item.actuallyadditions.itemDustLapis.name=青金石粉 +item.actuallyadditions.itemDustEmerald.name=绿宝石粉 +item.actuallyadditions.itemDustQuartz.name=石英粉 +item.actuallyadditions.itemDustCoal.name=煤粉 +item.actuallyadditions.itemDustQuartzBlack.name=焦黑石英粉 +item.actuallyadditions.itemFlaxSeed.name=亚麻种子 +item.actuallyadditions.itemHelmObsidian.name=黑曜石头盔 +item.actuallyadditions.itemChestObsidian.name=黑曜石头盔 +item.actuallyadditions.itemPantsObsidian.name=黑曜石护腿 +item.actuallyadditions.itemBootsObsidian.name=黑曜石护腿 +item.actuallyadditions.itemHelmEmerald.name=绿宝石头盔 +item.actuallyadditions.itemChestEmerald.name=绿宝石胸甲 +item.actuallyadditions.itemPantsEmerald.name=绿宝石护腿 +item.actuallyadditions.itemBootsEmerald.name=绿宝石靴子 +item.actuallyadditions.itemHelmQuartz.name=焦黑石英头盔 +item.actuallyadditions.itemChestQuartz.name=焦黑石英胸甲 +item.actuallyadditions.itemPantsQuartz.name=焦黑石英护腿 +item.actuallyadditions.itemBootsQuartz.name=焦黑石英靴子 +item.actuallyadditions.itemBooklet.name=实用拓展手册 +item.actuallyadditions.itemRarmorModuleReconstructor.name=Reconstruction Module +item.actuallyadditions.itemLaserWrench.name=中继器扳手 +item.actuallyadditions.itemChestToCrateUpgrade.name=板条箱升级 +item.actuallyadditions.itemMiscDrillCore.name=钻头核心 +item.actuallyadditions.itemMiscBlackDye.name=黑色染料 +item.actuallyadditions.itemCrystalRed.name=红石水晶 +item.actuallyadditions.itemCrystalBlue.name=青金石水晶 +item.actuallyadditions.itemCrystalLightBlue.name=钻石水晶 +item.actuallyadditions.itemCrystalGreen.name=绿宝石水晶 +item.actuallyadditions.itemCrystalBlack.name=煤晶 +item.actuallyadditions.itemCrystalWhite.name=铁晶 +item.actuallyadditions.itemMiscLens.name=透镜 +item.actuallyadditions.itemColorLens.name=斑斓透镜 +item.actuallyadditions.itemExplosionLens.name=爆破透镜 +item.actuallyadditions.itemDamageLens.name=死亡透镜 +item.actuallyadditions.itemCrateKeeper.name=板条箱守护徽章 +item.actuallyadditions.itemPickaxeCrystalRed.name=红石水晶镐 +item.actuallyadditions.itemAxeCrystalRed.name=红石水晶斧 +item.actuallyadditions.itemShovelCrystalRed.name=红石水晶锹 +item.actuallyadditions.itemSwordCrystalRed.name=红石水晶剑 +item.actuallyadditions.itemHoeCrystalRed.name=红石水晶锄 +item.actuallyadditions.itemHelmCrystalRed.name=红石水晶头盔 +item.actuallyadditions.itemChestCrystalRed.name=红石水晶胸甲 +item.actuallyadditions.itemPantsCrystalRed.name=红石水晶护腿 +item.actuallyadditions.itemBootsCrystalRed.name=红石水晶靴子 +item.actuallyadditions.itemPickaxeCrystalBlue.name=青金石水晶镐 +item.actuallyadditions.itemAxeCrystalBlue.name=青金石水晶斧 +item.actuallyadditions.itemShovelCrystalBlue.name=青金石水晶锹 +item.actuallyadditions.itemSwordCrystalBlue.name=青金石水晶剑 +item.actuallyadditions.itemHoeCrystalBlue.name=青金石水晶锄 +item.actuallyadditions.itemHelmCrystalBlue.name=青金石水晶头盔 +item.actuallyadditions.itemChestCrystalBlue.name=青金石水晶胸甲 +item.actuallyadditions.itemPantsCrystalBlue.name=青金石水晶护腿 +item.actuallyadditions.itemBootsCrystalBlue.name=青金石水晶靴子 +item.actuallyadditions.itemPickaxeCrystalLightBlue.name=钻石水晶镐 +item.actuallyadditions.itemAxeCrystalLightBlue.name=钻石水晶斧 +item.actuallyadditions.itemShovelCrystalLightBlue.name=钻石水晶锹 +item.actuallyadditions.itemSwordCrystalLightBlue.name=钻石水晶剑 +item.actuallyadditions.itemHoeCrystalLightBlue.name=钻石水晶锄 +item.actuallyadditions.itemHelmCrystalLightBlue.name=钻石水晶头盔 +item.actuallyadditions.itemChestCrystalLightBlue.name=钻石水晶胸甲 +item.actuallyadditions.itemPantsCrystalLightBlue.name=钻石水晶护腿 +item.actuallyadditions.itemBootsCrystalLightBlue.name=钻石水晶靴子 +item.actuallyadditions.itemPickaxeCrystalBlack.name=煤晶镐 +item.actuallyadditions.itemAxeCrystalBlack.name=煤晶斧 +item.actuallyadditions.itemShovelCrystalBlack.name=煤晶锹 +item.actuallyadditions.itemSwordCrystalBlack.name=煤晶剑 +item.actuallyadditions.itemHoeCrystalBlack.name=煤晶锄 +item.actuallyadditions.itemHelmCrystalBlack.name=煤晶头盔 +item.actuallyadditions.itemChestCrystalBlack.name=煤晶胸甲 +item.actuallyadditions.itemPantsCrystalBlack.name=煤晶护腿 +item.actuallyadditions.itemBootsCrystalBlack.name=煤晶靴子 +item.actuallyadditions.itemPickaxeCrystalGreen.name=绿宝石水晶镐 +item.actuallyadditions.itemAxeCrystalGreen.name=绿宝石水晶斧 +item.actuallyadditions.itemShovelCrystalGreen.name=绿宝石水晶锹 +item.actuallyadditions.itemSwordCrystalGreen.name=绿宝石水晶剑 +item.actuallyadditions.itemHoeCrystalGreen.name=绿宝石水晶锄 +item.actuallyadditions.itemHelmCrystalGreen.name=绿宝石水晶头盔 +item.actuallyadditions.itemChestCrystalGreen.name=绿宝石水晶胸甲 +item.actuallyadditions.itemPantsCrystalGreen.name=绿宝石水晶护腿 +item.actuallyadditions.itemBootsCrystalGreen.name=绿宝石水晶靴子 +item.actuallyadditions.itemPickaxeCrystalWhite.name=铁晶镐 +item.actuallyadditions.itemAxeCrystalWhite.name=铁晶斧 +item.actuallyadditions.itemShovelCrystalWhite.name=铁晶锹 +item.actuallyadditions.itemSwordCrystalWhite.name=铁晶剑 +item.actuallyadditions.itemHoeCrystalWhite.name=铁晶锄 +item.actuallyadditions.itemHelmCrystalWhite.name=铁晶头盔 +item.actuallyadditions.itemChestCrystalWhite.name=铁晶胸甲 +item.actuallyadditions.itemPantsCrystalWhite.name=铁晶护腿 +item.actuallyadditions.itemBootsCrystalWhite.name=铁晶靴子 +item.actuallyadditions.itemPaxelCrystalRed.name=红石水晶全能工具 +item.actuallyadditions.itemPaxelCrystalBlue.name=青金石水晶全能工具 +item.actuallyadditions.itemPaxelCrystalLightBlue.name=钻石水晶全能工具 +item.actuallyadditions.itemPaxelCrystalBlack.name=煤晶全能工具 +item.actuallyadditions.itemPaxelCrystalWhite.name=铁晶全能工具 +item.actuallyadditions.itemPaxelCrystalGreen.name=绿宝石水晶全能工具 +item.actuallyadditions.itemFoodBacon.name=培根 +item.actuallyadditions.itemMiscEnderStar.name=末影之星 +item.actuallyadditions.itemSpawnerChanger.name=刷怪笼控制工具 +item.actuallyadditions.itemMiscSpawnerShard.name=Spawner Shards +item.actuallyadditions.itemMinecartFireworkBox.name=Firework Box Cart +item.actuallyadditions.itemWaterBowl.name=装水的碗 +item.actuallyadditions.itemFilter.name=物品过滤器 +item.actuallyadditions.itemMiscBiomass.name=生物质 +item.actuallyadditions.itemMiscBiocoal.name=生物燃料 + +#Tooltips +tooltip.actuallyadditions.onSuffix.desc=开启 +tooltip.actuallyadditions.phantom.connected.desc=<方块已连接\!> +tooltip.actuallyadditions.phantom.stored.desc=<方块信息已存入连接器\!> +tooltip.actuallyadditions.phantom.unbound.desc=连接已清除 ! +tooltip.actuallyadditions.boundTo.desc=绑定于 +tooltip.actuallyadditions.clearStorage.desc=合成一次以清除存储\! +tooltip.actuallyadditions.phantom.connectedRange.desc=连接正常工作. +tooltip.actuallyadditions.phantom.connectedNoRange.desc=连接受阻\: 超出范围, 连接方块的区块未加载或连接方块的类型不正确. +tooltip.actuallyadditions.phantom.notConnected.desc=它没有连接\! +tooltip.actuallyadditions.phantom.blockInfo.desc=连接的方块在 %s at %s, %s, %s 有 %s 个方块远. +tooltip.actuallyadditions.factory.notPart.desc=控制器还不是正确的多方块结构的一部分\!好好看看控制器的介绍\! +tooltip.actuallyadditions.factory.works.desc=该岩浆工厂已成型,可以准备生产岩浆了\! +tooltip.actuallyadditions.oredictName.desc=矿物辞典条目: +tooltip.actuallyadditions.noOredictNameAvail.desc=无 +tooltip.actuallyadditions.codeName.desc=代码名字 +tooltip.actuallyadditions.baseUnlocName.desc=英文原名 +tooltip.actuallyadditions.meta.desc=Meta +tooltip.actuallyadditions.nbt.desc=NBT标签 +tooltip.actuallyadditions.unlocName.desc=Meta英文原名 +tooltip.actuallyadditions.pressShift.desc=按Shift +tooltip.actuallyadditions.disablingInfo.desc=如果你不想看到这个信息,就在实用拓展的配置文件里禁用它\! +tooltip.actuallyadditions.ctrlForMoreInfo.desc=按住CTRL查看高级信息 +tooltip.actuallyadditions.extraInfo.desc=高级信息 +tooltip.actuallyadditions.blockPhantomRange.desc=范围 +tooltip.actuallyadditions.laser.stored.desc=<继电器已存储\!> +tooltip.actuallyadditions.laser.connected.desc=<中继器已连接\!> +tooltip.actuallyadditions.laser.cantConnect.desc=无法连接\:中继器已是另一个网络的一部分,存储的中继器不在了或距离太远\! +tooltip.actuallyadditions.itemBooklet.desc=查看"指导手册",如果你愿意 + +#Gui Information +info.actuallyadditions.gui.animals=动物 +info.actuallyadditions.gui.enoughToBreed=数量足够繁殖\! +info.actuallyadditions.gui.tooMany=数量太多了\! +info.actuallyadditions.gui.notEnough=还不够数量繁殖\! +info.actuallyadditions.gui.disabled=禁止 +info.actuallyadditions.gui.up=上 +info.actuallyadditions.gui.down=下 +info.actuallyadditions.gui.north=北 +info.actuallyadditions.gui.east=东 +info.actuallyadditions.gui.south=南 +info.actuallyadditions.gui.west=西 +info.actuallyadditions.gui.all=所有 +info.actuallyadditions.gui.put=放入 +info.actuallyadditions.gui.pull=取出 +info.actuallyadditions.gui.whitelist=白名单 +info.actuallyadditions.gui.blacklist=黑名单 +info.actuallyadditions.gui.coffee=咖啡 +info.actuallyadditions.gui.ok=Ok +info.actuallyadditions.gui.the=\ +#info.actuallyadditions.gui.smart= +#info.actuallyadditions.gui.smartInfo= +#info.actuallyadditions.inputter.info.1=This is the first Slot in the connected Inventory to

at. +#info.actuallyadditions.inputter.info.2=This is the slot after the last Slot in the connected Inventory to

at. What that means\: If you, for example, write 2 in the field to the left and 5 in this one, it will

at Slot 2, 3, and 4. +info.actuallyadditions.inputter.whitelistInfo=这适用于本部分的黑/白名单。另一边也是一样,所以你可以把一些项目列入白名单,一些列入黑名单。请注意,如果黑名单是空的或至少一边的白名单中有一个物品,物品就总是可以通过物流疏导机。 +info.actuallyadditions.noLens=没有透镜 +info.actuallyadditions.booklet.manualName.1.1=Actually Additions +info.actuallyadditions.booklet.manualName.1.2=Actual Additions +info.actuallyadditions.booklet.manualName.1.3=Actually Addiction +info.actuallyadditions.booklet.manualName.1.4=Actual Edition +info.actuallyadditions.booklet.manualName.1.5=Actual Addition +info.actuallyadditions.booklet.manualName.2=手册 +info.actuallyadditions.booklet.edition=编辑 +info.actuallyadditions.deathRecorded=你的死亡信息已被记录,请使用Death Tracker来获取死亡位置! +#info.actuallyadditions.placer.sides.1=Placement Sides +#info.actuallyadditions.placer.sides.2=Usually when placing down blocks, they are placed towards the side of another block that you are looking at. Because the Phantom Placer can place blocks in mid-air, it doesn't know that. Usually you should just set it to a solid side. + +#Container Names +container.actuallyadditions.inputter.name=ESD +container.actuallyadditions.inputterAdvanced.name=高级ESD +container.actuallyadditions.grinder.name=磨粉机 +container.actuallyadditions.grinderDouble.name=两仓磨粉机 +container.actuallyadditions.furnaceDouble.name=两仓熔炉 +container.actuallyadditions.feeder.name=自动饲育机 +container.actuallyadditions.giantChest.name=小型板条箱 +container.actuallyadditions.giantChestMedium.name=中型板条箱 +container.actuallyadditions.giantChestLarge.name=大型板条箱 +container.actuallyadditions.repairer.name=物品修理机 +container.actuallyadditions.placer.name=方块放置器 +container.actuallyadditions.breaker.name=方块破坏器 +container.actuallyadditions.dropper.name=精准自动投掷器 +container.actuallyadditions.crafting.name=手持工作台 +container.actuallyadditions.canolaPress.name=油菜压榨机 +container.actuallyadditions.fermentingBarrel.name=发酵桶 +container.actuallyadditions.coalGenerator.name=煤炭发电机 +container.actuallyadditions.oilGenerator.name=原油发电机 +container.actuallyadditions.phantomPlacer.name=幻灵方块放置器 +container.actuallyadditions.phantomBreaker.name=幻灵方块破坏器 +container.actuallyadditions.phantomface.name=幻灵接口 +container.actuallyadditions.liquiface.name=幻灵流体接口 +container.actuallyadditions.energyface.name=幻灵能量接口 +container.actuallyadditions.fluidPlacer.name=流体成型器 +container.actuallyadditions.fluidCollector.name=流体吸收器 +container.actuallyadditions.coffeeMachine.name=咖啡制造机 +container.actuallyadditions.drill.name=手钻 +container.actuallyadditions.energizer.name=充能站 +container.actuallyadditions.enervator.name=释能站 +container.actuallyadditions.xpSolidifier.name=经验固化机 +container.actuallyadditions.cloud.name=微笑云朵 +container.actuallyadditions.directionalBreaker.name=长距离方块破坏器 +container.actuallyadditions.rangedCollector.name=物品吸收器 +container.actuallyadditions.miner.name=垂直挖矿机 +#container.actuallyadditions.laserRelayItemWhitelist.name=Laser Relay +container.actuallyadditions.filter.name=Item Filter + +#Update Information +info.actuallyadditions.update.generic=[{"text"\:"有新的"},{"text"\:"实用拓展 ","color"\:"dark_green"},{"text"\:"版本可用\!","color"\:"none"}] +info.actuallyadditions.update.versionCompare=[{"text"\:"当前版本\: "},{"text"\:"%s","color"\:"dark_red"},{"text"\:", 最新版本\: ","color"\:"none"},{"text"\:"%s","color"\:"dark_green"}] +info.actuallyadditions.update.buttons=[{"text"\:"["},{"text"\:"点击以查看更新日志","color"\:"green","clickEvent"\:{"action"\:"open_url","value"\:"%s"}},{"text"\:"] [","color"\:"none"},{"text"\:"点击以下载","color"\:"green","clickEvent"\:{"action"\:"open_url","value"\:"%s"}},{"text"\:"]","color"\:"none"}] +info.actuallyadditions.update.buttonOptions=单击:更新日志,按住 Shift 键单击:下载!(在浏览器中) +info.actuallyadditions.update.failed=[{"text"\:"实用拓展","color"\:"dark_green"},{"text"\:"的更新检查失败!查看日志文件以了解更多信息!","color"\:"none"}] + +#Achievements +achievement.actuallyadditions.openBooklet=知识的海洋 +achievement.actuallyadditions.openBooklet.desc=打开实用拓展指导手册 + +achievement.actuallyadditions.nameSmileyCloud=你最好的朋友 +achievement.actuallyadditions.nameSmileyCloud.desc=你最好的朋友 + +achievement.actuallyadditions.craftPhantomface=放大,放大,物品 ! +achievement.actuallyadditions.craftPhantomface.desc=制造一个幻灵接口 + +achievement.actuallyadditions.openTreasureChest=水下地牢 +achievement.actuallyadditions.openTreasureChest.desc=打开一个藏宝箱 + +achievement.actuallyadditions.craftLiquiface=放大,放大,流体 ! +achievement.actuallyadditions.craftLiquiface.desc=制造一个幻灵流体接口 + +achievement.actuallyadditions.craftEnergyface=放大,放大,RF! +achievement.actuallyadditions.craftEnergyface.desc=制造一个幻灵能量接口 + +achievement.actuallyadditions.craftCoalGen=Furnace for cools +achievement.actuallyadditions.craftCoalGen.desc=制造一个煤炭发电机 + +achievement.actuallyadditions.craftLeafGen=给我嚼,伙计\! +achievement.actuallyadditions.craftLeafGen.desc=制造一个咀叶发电机 + +achievement.actuallyadditions.craftReconstructor=Bzrrrrt something else +achievement.actuallyadditions.craftReconstructor.desc=制造一台原子再构机 + +achievement.actuallyadditions.craftLaserRelay=是中继, 不是延迟 +achievement.actuallyadditions.craftLaserRelay.desc=制造一个镭射中继器 + +achievement.actuallyadditions.craftCrusher=双倍走起\! +achievement.actuallyadditions.craftCrusher.desc=制造一台磨粉机 + +achievement.actuallyadditions.pickUpCoffee=让你上瘾! +achievement.actuallyadditions.pickUpCoffee.desc=采集一些咖啡 + +achievement.actuallyadditions.craftCoffeeMachine=可不要贪杯哦 +achievement.actuallyadditions.craftCoffeeMachine.desc=制造一个咖啡制造机 + +achievement.actuallyadditions.obscured=§ksome chieve name +achievement.actuallyadditions.obscured.desc=§klolwut y u actually look over meow + +achievement.actuallyadditions.craftFireworkBox=Bang Boom Bang +achievement.actuallyadditions.craftFireworkBox.desc=Craft a Firework Box + +#Booklet Recipe Names +booklet.actuallyadditions.shapelessRecipe=无序合成 +booklet.actuallyadditions.shapedRecipe=有序合成 +booklet.actuallyadditions.shapelessOreRecipe=无序矿典合成 +booklet.actuallyadditions.shapedOreRecipe=有序矿典合成 + +#Booklet Entries +booklet.actuallyadditions.indexEntry.gettingStarted.name=如何开始 +booklet.actuallyadditions.indexEntry.misc.name=其他杂项 +booklet.actuallyadditions.indexEntry.crossover.name= +booklet.actuallyadditions.indexEntry.functionalNoRF.name=不耗能方块 +booklet.actuallyadditions.indexEntry.allAndSearch.name=所有物品和搜索 +booklet.actuallyadditions.indexEntry.functionalRF.name=耗能方块 +booklet.actuallyadditions.indexEntry.generatingRF.name=产能方块 +booklet.actuallyadditions.indexEntry.itemsNoRF.name=不耗能物品 +booklet.actuallyadditions.indexEntry.itemsRF.name=耗能物品 + +#Booklet Info +booklet.actuallyadditions.recipeDisabled=这个物品的合成表在配置文件里被禁用了\! 如过你在服务器,要服主同意开启它的配方.如过你是单人,点击上面的'Open Config'按钮开启合成表\! +booklet.actuallyadditions.unavailable= +booklet.actuallyadditions.clickToSeeRecipe=点击查看更多信息 +booklet.actuallyadditions.amountOfWords=总计 %s 个词 +booklet.actuallyadditions.amountOfChars=总计 %s 个字 + +#Booklet Chapters +booklet.actuallyadditions.chapter.intro.name=实用拓展的介绍 +booklet.actuallyadditions.chapter.intro.text.1=长久以来,那些Minecraft的玩家们都生活在那近乎原始的时代中,被"麻烦"奴役着。是的,有成千种麻烦折磨着玩家,强迫他们将几小时,甚至数日的时间都浪费在诸如伐木、耕种、收获这样机械的工作上。而他们又有多少时间能用来享受探索那无尽的未知的乐趣呢? +booklet.actuallyadditions.chapter.intro.text.2=但就算是这样,仍然没有改变世界的人出现。就在无数玩家心灰意冷的时候,一位名叫Ellepeck的实业家出现了。他立志于终结那些枯燥乏味的工作,在这样的想法的激励下,他为Minecraft世界带来了各种“真正的扩展”,彻底解放了玩家们的双手,允许玩家们将更多的时间投入到建筑和探险上。 +booklet.actuallyadditions.chapter.intro.text.3=那么,谨由Ellpeck来为您呈现这部划时代的著作——《实用拓展手册》,不仅是本MOD的说明书,而且是将一切不可能化为可能的秘密武器。 ~ 由Tulkas执笔作序 + +booklet.actuallyadditions.chapter.craftingIngs.name=合成原料 +booklet.actuallyadditions.chapter.craftingIngs.text.1=实用拓展有许多利用基本合成物品来合成的东西。 这一章把所有的基本物品分组以便您一下子就能找到它们。 + +booklet.actuallyadditions.chapter.quartz.name=焦黑石英 +booklet.actuallyadditions.chapter.quartz.text.1=焦黑石英是一种生成在层之间的矿物。当被开采后,它可以被在熔炉里熔炼在磨粉机里面磨焦黑石英. +booklet.actuallyadditions.chapter.quartz.text.2=焦黑石英 物品在实用拓展的许多的合成配方当中被使用。它们对于大多数物品的合成都非常重要,所以您在世界中找到它们时应该开掘。它们可以被用来合成许多种不同的装饰方块,这将会在后面几面提到。每种装饰方块都可以用来合成楼梯,半砖和墙,配方与原版相同。下界石英,但是更死气沉沉。 + +booklet.actuallyadditions.chapter.cloud.name=微笑云朵 +booklet.actuallyadditions.chapter.cloud.text.1=微笑云朵是一种有魔力的浮动的云朵,通过它体内的固态经验获得生命。它在它的位置上上下下地、兴高采烈地浮动着。当你右键点击它时,你可以给它命名在给它某些特殊的名字时,比如说"Ellpeck""AcidBlues", 它就会拿出它携带的某些特殊的东西! + +booklet.actuallyadditions.chapter.coalStuff.name=煤炭相关 +booklet.actuallyadditions.chapter.coalStuff.text.1=有时你的煤炭燃烧时间太长或太短了,你知道我的意思吗?为了解决那个问题,你现在可以合成小块煤炭小块木炭以及木炭块来在熔炉中使用。木炭块燃烧时间和煤块一样长,而小块煤炭小块木炭燃烧时间是一块煤的八分之一,这意味着它在普通熔炉中能熔炼一个物品。 + +booklet.actuallyadditions.chapter.lamps.name=灯具 +booklet.actuallyadditions.chapter.lamps.text.1=灯具是一种提供大量光的方块,类似于神秘的萤石或火把,但是它们可以被染成所有的16种不同颜色,方法是直接合成它们或是把它们放在地上并手持染料右击当空手右击它们时,它们将会切换开关但是,如果你想使用红石能量来控制它,只需要在它旁边放个灯具控制器。 + +booklet.actuallyadditions.chapter.treasureChest.name=藏宝箱 +booklet.actuallyadditions.chapter.treasureChest.text.1=一个发现于水下的 藏宝箱。 +booklet.actuallyadditions.chapter.treasureChest.text.2=藏宝箱海洋生态群系中一种较为罕见的生成物。它们出现在海底很可能是绕道的船只扔下或丢失的压舱货物。然而如果你足够幸运,这些箱子可能会 装着一些珍贵的物品 。你可以 右击 它们收获这些令人惊异的战利品,然而破坏它们不会得到任何东西。 + +booklet.actuallyadditions.chapter.breaker.name=方块破坏器和方块放置器 +booklet.actuallyadditions.chapter.breaker.text.1=方块破坏器破坏它前方的方块。它可以朝向任意方向。当手拿红石火把右键单击它时,它将在接受到红石信号时停用每接收一次红石脉冲工作一次两种模式之间之间切换。 +booklet.actuallyadditions.chapter.breaker.text.2=方块放置器在它前方放置方块。它可以朝向任意方向。当手拿红石火把右键单击它时,它将在接受到红石信号时停用每接收一次红石脉冲工作一次两种模式之间之间切换。 +booklet.actuallyadditions.chapter.breaker.text.3=液体放置器放置你供应给它的液体。它需要1000mB的液体来放置一个液体方块。当手拿红石火把右键单击它时,它将在接受到红石信号时停用每接收一次红石脉冲工作一次两种模式之间之间切换。 +booklet.actuallyadditions.chapter.breaker.text.4=液体收集器从它前方收集 1000mB的液体,即一桶。当手拿红石火把右键单击它时,它将在接受到红石信号时停用每接收一次红石脉冲工作一次两种模式之间切换。 + +booklet.actuallyadditions.chapter.phantomfaces.name=幻灵接口 +booklet.actuallyadditions.chapter.phantomfaces.text.1=幻灵接口是一种简单的把物品容器链接到一起的方法,但是它有个很大的优点:幻灵接口不只是把两个容器连在一起,而且还模拟它连接到的容器,这意味着你可以通过把东西放入幻灵接口和从其中抽出来与物品容器交互。幻灵接口默认最大识别范围为个方块,但是你可以使用幻灵增幅器来增大这个范围。要将幻灵接口链接到物品容器,只需要使用幻灵连接器右键点击容器,再右键单击幻灵接口即可。 +#booklet.actuallyadditions.chapter.phantomfaces.text.2=Important Information\:It should be noted that the Phantomface is not supposed to be used as a wireless transport system. The Phantomface should be used when, for example, wanting to input items into a machine that doesn't have enough space for the amount of cables you need around it, or when you want it to look nice in a room without needing any cables or other blocks around it. It's not a short-range Tesseract. +#booklet.actuallyadditions.chapter.phantomfaces.text.3=The default Phantomface works for items, like described on the first page. +#booklet.actuallyadditions.chapter.phantomfaces.text.4=The Phantom Liquiface acts exactly like the normal Phantomface, but it works for liquid containing blocks. When given a Redstone Signal, it can be set to Auto-Output. Be careful with this though, as it could cause infinte loops and lag under certain conditions\! +#booklet.actuallyadditions.chapter.phantomfaces.text.5=The Phantom Energyface acts exactly like the normal Phantomface, but it works for RF, meaning you can connect it to things like Generators and Crushers. +#booklet.actuallyadditions.chapter.phantomfaces.text.7=The Phantom Booster, as explained on the first page, ups the range of Phantomfaces by being placed on top of them. The maximum amount above one Phantomface is 3. + +booklet.actuallyadditions.chapter.phantomBreaker.name=幻灵方块破坏器与放置器 +booklet.actuallyadditions.chapter.phantomBreaker.text.1=幻灵方块破坏器放置器有着和幻灵接口相同的工作原理,不过它们的作用是远距离的破坏以及放置方块。其默认最大识别范围为格方块。欲使其连接并破坏一个方块,你需要按照Phantomface Chapter中描述的方法去操作。当它与When connecting them to air spaces, just place a block, store it and then break it again. 当手拿红石火把右键单击它时,它将在接受到红石信号时停用每接收一次红石脉冲工作一次两种模式之间切换。 + +booklet.actuallyadditions.chapter.esd.name=ESD +booklet.actuallyadditions.chapter.esd.text.1=ESD是一种工作方式类似于漏斗的方块,但是它的功能比漏斗多的多你可以选择从方块的哪一面来输入和输出,而且还可以精确地配置进行输入输出的格子的范围\!为了获得关于ESD的更多准确信息,你可以合成它,然后将鼠标悬浮在它的GUI的元素上\!它的真名是 + +booklet.actuallyadditions.chapter.xpSolidifier.name=经验固化器 +booklet.actuallyadditions.chapter.xpSolidifier.text.1=经验固化器可以把玩家的经验值转变成固态经验,而手拿固态经验右键单击又可以让存储在里面的经验值回到玩家身上。用这种方法存储你的经验值既安全又方便,这样的话,在你死后你的经验值就不会丢失。固态经验有时也会从怪物身上掉落。 + +booklet.actuallyadditions.chapter.greenhouseGlass.name=温室玻璃 +booklet.actuallyadditions.chapter.greenhouseGlass.text.1=温室玻璃是加快你的植物生长的一种非常有效的方式!当它被放置在植物上方的任意位置,只要它与植物之间没有方块阻挡,而且玻璃可以接受到阳光,它就可以显著地加快植物生长当然,一定要是白天才行。想想看,这是显然的。 +booklet.actuallyadditions.chapter.greenhouseGlass.text.2=温室气体 + +booklet.actuallyadditions.chapter.fishingNet.name=渔网 +booklet.actuallyadditions.chapter.fishingNet.text.1=渔网是一个方块,它使钓鱼变得容易得多!把它放置在水的上方,只要你给它一点时间,它就可以自动抓鱼!如果要存储鱼,只需在钓鱼网 上方放个箱子,或是让它把物品从顶部喷出,再手动收集他们。专供不耐烦的人使用 + +booklet.actuallyadditions.chapter.feeder.name=自动饲育机 +booklet.actuallyadditions.chapter.feeder.text.1=自动饲育机是人工饲喂的牧场的一个好的替代品。把它放在畜栏中间,并且给它提供一些小麦,种子或胡萝卜(这取决于你想喂什么动物),然后等着就行了。它将会自动饲喂动物,而且如果它周围的动物足够多,它就会自动关闭以防止大量动物造成卡顿。绿色和平组织批准 + +booklet.actuallyadditions.chapter.compost.name=堆肥和肥料 +booklet.actuallyadditions.chapter.compost.text.1=堆肥被用于把捣碎的食物转变成肥料. 肥料用法与骨粉相同,但是合成方法比骨粉简单得多。只需合成捣碎的食物然后把个捣碎的食物放入堆肥然后稍加等待即可。当捣碎的食物发酵后,只需再次右键点击即可拿出。 +booklet.actuallyadditions.chapter.compost.text.3=捣碎的食物可以通过任意食物或可种植的物品直接合成得到。 + +booklet.actuallyadditions.chapter.crate.name=板条箱 +booklet.actuallyadditions.chapter.crate.text.1=板条箱很大。真的很大。它们可以存储成千上万的物品,存储量比四个箱子还要多。 +booklet.actuallyadditions.chapter.crate.text.2=在破坏板条箱前把板条箱守护徽章放置在板条箱内将会使得它保留内部所有物品,但是,在板条箱被再次放置后,守护徽章将会被销毁。 +booklet.actuallyadditions.chapter.crate.text.3=板条箱升级允许你把任意箱子转换成板条箱,并保留其中物品!只需按住shift右键单击箱子即可使用。 + +booklet.actuallyadditions.chapter.coffeeMachine.name=咖啡制造机 +booklet.actuallyadditions.chapter.coffeeMachine.text.1=咖啡机用于制造一种类似于药水,可以给予玩家几种附加效果的咖啡为了使用它,你需要空杯子咖啡豆。在野外可以发现咖啡豆,你也可以在耕地上种植它。它需要RF/t的能源供给,每制作一杯咖啡需要mB的水。如果你想知道每种加入咖啡的物品都有什么用,翻到后几面的咖啡机配方,然后把鼠标悬停在物品的上方即可。 +#booklet.actuallyadditions.chapter.coffeeMachine.text.2=To actually give your coffee some buffs, put some of the items shown on the later pages into the slots on the right. The more slots are filled up with one item, the higher the Amplifier of the effect will be. The Maximum Amplifier is the max amount of items to be put into one coffee. Order matters\: When using, for example, Milk (to see what it does exactly, go to a later page), you are going to have to plan the items out inside the numbered slots in such a way that it brews the coffee you want. +booklet.actuallyadditions.chapter.coffeeMachine.text.3=这是一个示例配方,制作一杯包含抗火1,0\:20速度 1,2\:30效果的咖啡。 +booklet.actuallyadditions.chapter.coffeeMachine.text.6=牛奶对于咖啡来说也很重要:它能为所有的附加效果提供2分钟延时,但会r降低1级Amplifier。如果原本的Amplifier是1,那么牛奶会抵消掉这个效果。 +booklet.actuallyadditions.chapter.coffeeMachine.text.7=如果你看到了这一页,说明你要么安装了HarvestCraft,要么你在看lang文件。这些东西是为素食主义者准备的牛奶的替代品。 + +booklet.actuallyadditions.chapter.crusher.name=磨粉机与两仓磨粉机 +booklet.actuallyadditions.chapter.crusher.text.1=磨粉机可把每种矿物,锭和宝石转变成对应的粉末,功率为RF/t。当你把矿物放入时,它们会被转变成双倍的粉末两仓磨粉机基本上也是如此,然而它以RF/t的功率就能一次粉碎2个矿石。在接下来几面,你将会看到一些使用到磨粉机的额外的实用配方。他是我的心上人(英语为crush,同粉碎) + +booklet.actuallyadditions.chapter.furnaceDouble.name=两仓熔炉 +booklet.actuallyadditions.chapter.furnaceDouble.text.1=两仓熔炉工作方式和熔炉一样,但是,它可以以RF/t的功率一次熔炼2个物品。 + +booklet.actuallyadditions.chapter.lavaFactory.name=岩浆工厂 +booklet.actuallyadditions.chapter.lavaFactory.text.1=岩浆工厂可消耗RF来制造岩浆。每产生一个岩浆方块需要消耗RF岩浆工厂上方的空当四周必须以4个CasingBlock包围,否则岩浆工厂不会工作。右击岩浆工厂可以显示当前环境下它是否能工作。Lava, for a fact. ory + +booklet.actuallyadditions.chapter.energizer.name=充能站与释能站 +booklet.actuallyadditions.chapter.energizer.text.1=充能站把它储能槽中的能量充入使用RF的物品之中。 +booklet.actuallyadditions.chapter.energizer.text.2=释能站存储有RF的物品中释放出能量,并将能量储存在它的储能槽中。 + +booklet.actuallyadditions.chapter.repairer.name=物品修理机 +booklet.actuallyadditions.chapter.repairer.text.1=物品修理机可使用RF/t的RF能量来修复可以在原版铁砧中修复的物品,不需要消耗任何材料! + +booklet.actuallyadditions.chapter.coalGen.name=煤炭发电机 +booklet.actuallyadditions.chapter.coalGen.text.1=煤炭发电机利用任何可以作为原版熔炉燃料的物品产生功率为RF/t的RF能量。注意,它只会在产生的能量有处可去的时候消耗燃料。 + +booklet.actuallyadditions.chapter.solarPanel.name=太阳能板 +booklet.actuallyadditions.chapter.solarPanel.text.1=太阳能板在白天且阳光直射的情况下产生功率为RF/t的RF能量。可以镶在墙上 + +booklet.actuallyadditions.chapter.heatCollector.name=热能发电机 +booklet.actuallyadditions.chapter.heatCollector.text.1=热能发电机是一个发电功率为RF/t的机器。它需要与至少个岩浆方块直接接触才能产生能量。岩浆与顶部接触视为无效。但是使用它的时候你要留个心眼,它有时会摧毁一些与它接触的岩浆方块! + +booklet.actuallyadditions.chapter.canola.name=油菜相关 +booklet.actuallyadditions.chapter.canola.text.1=那些在野外随处可见的油菜可以制成各种各样的东西!你可以油菜提炼菜籽油原油并以此产出RF首先你需要用油菜压榨机将一定量油菜提炼为菜籽油。压榨机本身的能耗是 RF/t。然后,用发酵桶可将菜籽油转化为原油。最终产出的原油可在原油发电机中当作燃料,产生 RF/t。 +booklet.actuallyadditions.chapter.canola.text.2=另外,如果你有很多油菜籽处理不了,你还可以一次性将20个油菜籽放入堆肥机中以生产生物质生物质可在熔炉中烧制成Bio Coal,再次烧制可得到常规的煤炭。 + +booklet.actuallyadditions.chapter.wings.name=蝙蝠之翼 +booklet.actuallyadditions.chapter.wings.text.1=有的时候,蝙蝠会掉落翅膀。由于强度不足以载人,这些翅膀不能真正用于飞行。你可以把这些翅膀制作成蝙蝠之翼使它的强度达到能载人的水平。当你把它置于你的背包中时,它可以让你像创造模式一样悬停飞行。 + +booklet.actuallyadditions.chapter.foods.name=食品 +booklet.actuallyadditions.chapter.foods.text.1=是的,这就是培根。不要把试图它称作Ellspeck真的求你了,不要这样。 + +booklet.actuallyadditions.chapter.leafBlower.name=吹叶器 +booklet.actuallyadditions.chapter.leafBlower.text.1=手持吹叶器右击可以吹走周围高草、花和其他类似的东西。它有一个进阶版本,高级吹叶器。这种高级吹叶器和基础的吹叶器基本相同,可以吹得更快,还可以破坏树叶。 + +booklet.actuallyadditions.chapter.aiots.name=全能工具(AIOT) +booklet.actuallyadditions.chapter.aiots.text.1=全能工具是一种集镐、斧、铲、锄和剑于一身的工具。它们可以用任何材料制成,如果你安装了热力基础(Thermal Foundation)或者MekanismTools模组,你甚至可以使用来自这些模组的材料制作全能工具! + +booklet.actuallyadditions.chapter.jams.name=果酱 +booklet.actuallyadditions.chapter.jams.text.1=有一次,有一只小猫特别想要一些果酱。于是我给它做了一些果酱说真的,这就是些普通果酱。你可以在村民家里找到它,或者从果酱商贩村民那里买到。每瓶果酱会给你两种不同的药水附加效果! +booklet.actuallyadditions.chapter.jams.text.2=一个果酱作坊它的居民 +booklet.actuallyadditions.chapter.jams.text.3=所以,你大概会想知道这个果酱的名字是什么意思。现在,让我告诉你:-哈密瓜和猕猴桃-哈密瓜和可可豆-菠萝和可可豆-樱桃、苹果和肉桂-李子、苹果和柠檬-葡萄、猕猴桃和香蕉-醋栗、香蕉和覆盆子现在,你可能会问,哪个是哪个?自己一边儿想去吧。 + +booklet.actuallyadditions.chapter.potionRings.name=药水指环 +booklet.actuallyadditions.chapter.potionRings.text.1=药水指环有两种版本:普通版高级版当你把普通版拿在手上,它会给予你一级的药水附加效果。高级版本放在包中的任何位置都有效并且提供二级的药水附加效果。 + +booklet.actuallyadditions.chapter.drill.name=钻头 +booklet.actuallyadditions.chapter.drill.text.1=手钻用起来就像一把镐或者锹一样。它使用RF来破坏方块。它可以在充能站中被充能,你还可以通过把它拿在手上按住Shift右键单击来升级。有大量的升级可用,这里是其中一部分的解释:范围采掘升级增大手钻开掘的范围的大小。方块放置升级,在你手持它右键单击后,它就会记录下它所在的快捷栏格子。在将它放入手钻后,你就可以通过拿着手钻右键单击把那个格子的方块放置在地上。你也可以把电池安装到手钻来升级它的储电量。 +booklet.actuallyadditions.chapter.drill.text.3=手钻也可以被成Minecraft的16种颜色。但是,这只是装饰性的,除了让它看起来不同,对它不会有任何其他的效果。 + +booklet.actuallyadditions.chapter.staff.name=法杖 +booklet.actuallyadditions.chapter.staff.text.1=传送法杖,当在充能站中充能后,只需右击,就可以把你传送到屏幕中央十字准星所指的地方。当你的十字准星对着一个方块时,它会把你传送到那个方块的位置,但是,如果你的十字准星没有指着一个方块,准星所对着的方向的仰角就不能超过,否则传送将会失败。 + +booklet.actuallyadditions.chapter.magnetRing.name=磁力指环 +booklet.actuallyadditions.chapter.magnetRing.text.1=磁力指环,当它在充能站被充电后,只要它在你的背包里,它就可以消耗RF产生磁场,将大范围的物品吸到你身上。 + +booklet.actuallyadditions.chapter.growthRing.name=生长指环 +booklet.actuallyadditions.chapter.growthRing.text.1=生长指环,当在充能站充能后,只要拿在手上,就可以消耗RF来让你周围的植物生长大大加快。 + +booklet.actuallyadditions.chapter.waterRemovalRing.name=排液指环 +booklet.actuallyadditions.chapter.waterRemovalRing.text.1=排液指环,当在充能站中充能后,只要拿在手上,就可以使用RF来移除岩浆。 + +booklet.actuallyadditions.chapter.batteries.name=电池 +booklet.actuallyadditions.chapter.batteries.text.1=电池是个储存并携带RF能量的好方案。它们可以在充能站中充电在释能站中放电。 + +booklet.actuallyadditions.chapter.leafGen.name=咀叶发电机 +booklet.actuallyadditions.chapter.leafGen.text.1=咀叶发电机可以利用周围放置的树叶产生RF能量它会在发电过程中摧毁这些树叶,每块树叶可以发出RF你可以右击它以查看它已经储存了多少RF能量。它可以作用于周围方块的范围。 +booklet.actuallyadditions.chapter.leafGen.text.2=嘎嘣脆 + +booklet.actuallyadditions.chapter.longRangeBreaker.name=长距离方块破坏器 +booklet.actuallyadditions.chapter.longRangeBreaker.text.1=长距离方块破坏器工作起来就像一个普通的方块破坏器,但是它可以破坏面前至多格的方块每破坏一个方块它会消耗RF当手拿红石火把右键单击它时,它会在接受到红石信号时停用每接收一次红石脉冲工作一次两种模式之间切换。图为正在破坏第层墙壁 +booklet.actuallyadditions.chapter.longRangeBreaker.text.2=Sequence Breaking + +booklet.actuallyadditions.chapter.dropper.name=自动精准投掷器 +booklet.actuallyadditions.chapter.dropper.text.1=自动精准投掷器工作起来就像一个普通的投掷器,但是它不需要接收红石信号脉冲就可以自动地投掷物品。同样,它也可以做到将物品精准地投掷到你所指的方向而不是粗暴地把物品砸在地上。当你手持红石火把右击它的时候,它会在接收红石信号时停止工作每接收一次红石脉冲工作一次这两个模式之间切换。 + +booklet.actuallyadditions.chapter.rangedCollector.name=物品收集器 +booklet.actuallyadditions.chapter.rangedCollector.text.1=物品收集器工作起来就像一个漏斗,它会收集周围掉落的物品。当它被通入能量,它便会收集周围范围内掉落的物品。它内置物品过滤器,可以设置白名单或者黑名单然而它却有一个缺点:它不会自动输出它收集的物品。 + +booklet.actuallyadditions.chapter.hairBalls.name=毛球 +booklet.actuallyadditions.chapter.hairBalls.text.1=毛球会从猫身上掉落。浏览下一页以获取更多信息。 +booklet.actuallyadditions.chapter.hairBalls.text.2=毛球是一件会从被玩家驯服身上掉落的物品。猫是一种很古怪的的生物,因为它们会让任何东西粘在自己的毛发上毛球或许长相令人不堪入目,但当你通过右击移除上面那些杂乱的猫毛后,说不定会找到一些有价值的物品或者只会收获到一些线。FUURRRRRR\!\! + +booklet.actuallyadditions.chapter.laserRelays.name=激光中继器 +booklet.actuallyadditions.chapter.laserRelays.text.1=激光中继器是一台能够无线传输RF的设备,这只需要将它和中继器扳手相连接并生成网络即可。 把Power Generator或Receiver放置在中继器旁,即可让它从网络中的其它中继器接收能量。Two relays can be at most blocks apart. During an energy transfer, they have an Energy Loss of %. +booklet.actuallyadditions.chapter.laserRelays.text.4=中继器扳手的模式可以用潜行右击调整。可用的模式有总是显示激光从不显示激光仅在手持扳手时显示激光。 + +booklet.actuallyadditions.chapter.blackLotus.name=黑莲花 +booklet.actuallyadditions.chapter.blackLotus.text.1=想一想:你需要合成黑色羊毛黑色粘土或者任何其他需要黑色染料的东西,但你觉得杀死那么多无辜的鱿鱼让你愧疚?唔,那么黑莲花正是你需要的东西!只要在野外随便找找,你就能找到一朵,然后就可以用它合成一些黑色染料,用来代替墨囊这样你就不再需要杀掉可怜的鱿鱼了。 +booklet.actuallyadditions.chapter.blackLotus.text.2=不,不是那个,Vaz。 + +#booklet.actuallyadditions.chapter.crystals.name=Crystals and Reconstructor +#booklet.actuallyadditions.chapter.crystals.text.1=The Atomic Reconstructor is used to craft Crystals, which are the main crafting ingredient in most items from Actually Additions. Upon being supplied with power, it shoots out a Laser. When the Laser hits a block, it will convert all surrounding items and blocks, provided they can be converted. When shooting a laser, it uses RF, but additional rates vary depending on the conversion. +#booklet.actuallyadditions.chapter.crystals.text.2=There are various Lenses that can be attached to the Reconstructor that don't all follow the default behavior of the Reconstructor and are able to do some neat things. See the "Reconstructor Lenses & Misc" chapter in the booklet's Miscellaneous section for more information. When right-clicking the Reconstructor with a Redstone Torch in hand, it will change between a mode where it gets deactivated by Redstone and a mode where it responds to pulses. +#booklet.actuallyadditions.chapter.crystals.text.3=It should be noted that any recipes listed without information about Lenses don't use one. I thought that was obvious. +#booklet.actuallyadditions.chapter.crystals.text.5=When you have crafted a couple of items, you might want to find a way to automate this. There is a very simple way to do accomplish this\: Place the Atomic Reconstructor down facing into a Precision Dropper (to find it, look it up in the All Items and Search Entry\!). Next, place a Ranged Collector in the area that has the converted items set as a whitelist. Now you can just chuck your raw materials into the Dropper to convert them\! +booklet.actuallyadditions.chapter.crystals.text.6= + +booklet.actuallyadditions.chapter.bookTutorial.name=手册简介 +booklet.actuallyadditions.chapter.bookTutorial.text.1=实用拓展手册是非常灵活的。简要概述 ︰ 条目与章节 条目是一个一般性的主题,而章节几乎总是指向一个特定的物品。当关闭一个章节时,索引将会打开。当关闭索引时,就会打开主页。书签书签在手册的底部,当你点击它时就会存储当前页面,当再次点击它时就会回到这一页面。这对于轻松地浏览本书非常有用。 +booklet.actuallyadditions.chapter.bookTutorial.text.2=右上角的按钮可以打开成就或是设置屏幕。当看的一章与某种成就有联系时,一个对话泡泡将会在成就按钮旁弹出,把鼠标放在它上方就可以看到有关的成就。左上角的按钮可以转到与本模组有关的网页。当更新可用时,左上角还会出现一个下载更新按钮。 +booklet.actuallyadditions.chapter.bookTutorial.text.3=如果你出于某些原因需要重新合成这本书,只需要准备一张纸和一份油菜种子(它们随机生成在世界里),并且把它们无序合成,就可以得到。 + +#booklet.actuallyadditions.chapter.reconstructorLenses.name=Reconstructor Lenses & Misc +#booklet.actuallyadditions.chapter.reconstructorLenses.text.1=The Atomic Reconstructor, by default, can only convert some blocks. This can be changed, however, with Lenses. They can be, once crafted, attached to the Reconstructor via right-clicking the Reconstructor with them in hand. To remove them, right-click it with an empty hand. Lenses have lots of different features and uses, as you can see on the following pages. However, there is also some other useful recipes to be found there too. +booklet.actuallyadditions.chapter.reconstructorLenses.text.3=The Lens of Color changes the color of Stained Glass and Panes, Stained Clay, Carpetet, Dye, Lamps, Wool in its sight. Contrary to using no lens, it goes through blocks and only converts blocks it touches. +booklet.actuallyadditions.chapter.reconstructorLenses.text.4=The Lens of Detonation will create a firey explosion around the block the laser hits. Be careful with this. Seriously. (With this lens, the laser also goes 3 times as far\!) +booklet.actuallyadditions.chapter.reconstructorLenses.text.5=The Lens of Certain Death will, deal lots of damage to whatever steps into it, enough, in fact, to kill a player in a single hit. + +booklet.actuallyadditions.chapter.miscDecorStuffsAndThings.name=一些装饰品 +booklet.actuallyadditions.chapter.miscDecorStuffsAndThings.text.1=有时候,你在搞建筑时,你会发现你根本没有足够多的装饰方块。那好,我们接下来隆重推出:Ethetic Blocks这些和石英相仿,但有着更好看的花纹的方块还能合成为楼梯台阶,其合成也是一如既往的原版风格。 + +#booklet.actuallyadditions.chapter.miner.name=Vertical Digger +#booklet.actuallyadditions.chapter.miner.text.1=Vertical Digger可以用来自动挖掘方块。from the world 它有两种模式\: 它可以只挖掘矿石挖掘任何方块。每挖掘一个方块,它都会消耗 RF。挖掘的物品会被存储到内部缓存中,右击即可取出。Mined items get stored in an internal buffer that can be accessed through right-clicking. 它的Its default radius is , but much like Phantomfaces, the Digger's range can be upgraded by placing 3 or less Phantom Boosters above it. +booklet.actuallyadditions.chapter.miner.text.2=(Works with any colored Drill) I dig it + +booklet.actuallyadditions.chapter.fireworkBox.name=Firework Box +booklet.actuallyadditions.chapter.fireworkBox.text.1=Firework Box最适合新年佳节!在放置后供应一些RF能量,它就会向附近射出一些随机生成烟花每次喷射都会消耗 RF能量。你知道的,原版的烟花合成起来是多么恼人,但它们又那么漂亮。于是这件物品解决了问题。 +booklet.actuallyadditions.chapter.fireworkBox.text.2=手拿红石火把右键单击它后,它会在接受到红石信号时停用每接收一次红石脉冲工作一次两种模式之间切换。 + +booklet.actuallyadditions.chapter.rf.name=RF?Tesla? +booklet.actuallyadditions.chapter.rf.text.1=对于那些不经常使用RF的人,我们也准备了一个简要说明。红石通量 (Redstone Flux, RF)是众多MOD使用的一种能源系统。通常所说的RF/t是指机器在每个tick产生或消耗RF能量的数量。要将机器连接在一起,只需要将它们紧挨着放置即可。另外,如果你愿意的话,你还可以使用Tesla作为能源单位,它使用起来和RF没有太大差别。 + +booklet.actuallyadditions.chapter.enderStar.name=末影之星 +booklet.actuallyadditions.chapter.enderStar.text.1=末影之星可以通过击杀凋零或前往末地收集龙之吐息获得。龙之吐息就是那些末影龙喷吐出的紫色颗粒,可以用瓶子来收集它们。 末影之星许多合成需要的材料。 + +booklet.actuallyadditions.chapter.phantomRedstoneface.name=幻灵红石接口 +booklet.actuallyadditions.chapter.phantomRedstoneface.text.1=如果你还不知道什么是幻灵接口,请先阅读幻灵接口条目。 幻灵红石接口是用来传输红石信号的幻灵接口。但和一般的幻灵接口不一样,它“只在一个方向上工作”。What this means is that the connected block has to provide redstone power for redstone next to the Redstoneface to become powered. It does not work the other way around. + +booklet.actuallyadditions.chapter.spawnerShard.name=刷怪笼碎片 +booklet.actuallyadditions.chapter.spawnerShard.text.1=刷怪笼碎片破坏刷怪笼后掉落的一种合成材料。每当刷怪笼被破坏后,总是会掉落一块碎片。 + +#booklet.actuallyadditions.chapter.spawnerChanger.name=刷怪笼控制工具 +#booklet.actuallyadditions.chapter.spawnerChanger.text.1=刷怪笼控制工具是一件可以操控刷怪笼生成的怪物的物品。 This can be accomplished by first of all picking up the desired mob to spawn with the Changer, killing it in the process. Next, the Changer can be right-clicked on the spawner, causing the spawner to be changed. This process probably won't work with every type of mob though. + +#booklet.actuallyadditions.chapter.itemStorage.name=Laser Relay Item Storage +#booklet.actuallyadditions.chapter.itemStorage.text.1=Additionally to the Laser Relays that transfer RF, there are also Item Laser Relays that are able to transfer items. This works in a verry different way though. To connect Item Laser Relays together works the same as connecting normal ones, however, you need an Item Interface to be able to interact with them. You can place any inventories (such as chests and furnaces) next to the Item Laser Relays, but to be pulled out from or inputted into, there needs to be an Item Interface connected +booklet.actuallyadditions.chapter.itemStorage.text.2=to one of the Item Laser Relays. To input or output items in the system, just pipe them into the interface. If you want a way to make a storage system with this, there are also Advanced Item Laser Relays, in which, by sneak-right-clicking them, you can specify which items are allowed and disallowed to enter or exit inventories connected to this particular relay. When placing an advanced relay next to an Item Interface, this effect also applies. + +#booklet.actuallyadditions.chapter.banners.name=Additional Banners +#booklet.actuallyadditions.chapter.banners.text.1=对于Actually Additions中的special items,有特殊的Banner patterns。All of these just require the item next to the banner in the crafting grid with, optionally, a color. You can also combine them with a Shield like normal. The items that have a banner pattern are\: 实用拓展手册 The Phantom Connector The Leaf Blower (not the advanced version) The Drill (only the white one works due to the way banners work) + +#booklet.actuallyadditions.chapter.lushCaves.name=Lush Caves +#booklet.actuallyadditions.chapter.lushCaves.text.1=If you have ever done any Cave exploration, you will have probably noticed some caves that have trees and grass inside of them. These can be found at any height underground all over the world, and they can be very valuable when needing wood for torches and tools at some point. If you didn't ever see one before, look on the next page for a picture\! + +booklet.actuallyadditions.chapter.waterBowl.name=装水的碗 +booklet.actuallyadditions.chapter.waterBowl.text.1=用空碗右击水即可获得装水的碗。和一样,再次右击别的方块可以将水倒出。对于前期的农场来说,这将会是一件实用的工具。 + +booklet.actuallyadditions.chapter.playerInterface.name=玩家接口 +booklet.actuallyadditions.chapter.playerInterface.text.1=玩家接口幻灵接口工作方式相似,但玩家接口连接的是玩家而非方块,并且连接会在玩家放置它之后建立。当向其输入物品时,物品会进入玩家的物品栏。还有,当向其输入RF能量时,它会为玩家物品栏中的物品充能它具有格方块的效应范围,以及,你可以通过在其顶部放置3个幻灵增幅器来扩大范围。 + +booklet.actuallyadditions.chapter.displayStand.name=物品展示架 +booklet.actuallyadditions.chapter.displayStand.text.1=物品展示架是一种可将各种物品或方块展示出来的方块。只需要将待展示方块或物品右击放上去,这个方块或物品就会悬浮在展示架上方。再次右击可将其取下。除此以外,某些物品可令展示架发挥特殊效果,但这个功能需要消化RF,阅读下一页可获得详细信息。 +booklet.actuallyadditions.chapter.displayStand.text.2=吹叶器以及高级吹叶器在展示架上时可以缓慢清理掉附近的草丛和树叶。药水指环在展示架上时也能发挥效果。普通版本只能将药水效果给予附近的一个生物,但高级版本可在大范围内给予任何生物以指定药水效果,但需要消耗大量RF。 + +booklet.actuallyadditions.chapter.itemFilter.name=物品过滤器 +booklet.actuallyadditions.chapter.itemFilter.text.1=物品过滤器可在Advanced Item Laser RelaysESDsRanged Collectors中使用,以扩充它们的白名单大小。This can be done by right-clicking with the filter in hand and placing items to be filtered inside of it. The filter can then be placed into any whitelist slot in the desired machine. For more information on this, hover over the whitelist buttons in the GUIs of whitelistable machines! + +booklet.actuallyadditions.chapter.videoGuide.name=视频教程 +booklet.actuallyadditions.chapter.videoGuide.text.1=如果你还是不知道如何入门Actually Additions,或者只是想简单了解下这个MOD,那么恭喜你,这里有一个由Booty Toast制作的华丽的视频可让你迅速了解这个MOD的各种玩法。(的确这个人的名字有点奇怪)现在,只需点击立即浏览就可以打开这个YouTube的视频了!走过路过不要错过! +booklet.actuallyadditions.chapter.videoGuide.page.1.button=立即浏览 + +booklet.actuallyadditions.chapter.shockSuppressor.name=震波吸收器 +booklet.actuallyadditions.chapter.shockSuppressor.text.1=震波吸收器在供应RF能量后,能够保护周围至少个方块的区域免受各类爆炸的破坏,无论是恶魂,TNT还是爬行者发生的爆炸。保护一个方块需要消耗 RF。 +#booklet.actuallyadditions.chapter.shockSuppressor.text.2=Credit where credit is due: Or something like that. Anyways, this thing was thought up and suggested to me by praetoras. Thanks for that brilliant idea! What's a fourth wall..? \ No newline at end of file From 2f9b6aa8f7c12a780e3dc634c905ce1f490adb78 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 17 Jul 2016 12:59:23 +0200 Subject: [PATCH 26/34] booklet now states that drill needs previous tiers Closes #155 --- .../de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java | 2 +- src/main/resources/assets/actuallyadditions/lang/en_US.lang | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 6798cff12..852e908b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -150,7 +150,7 @@ public final class InitBooklet{ new BookletChapter("itemFilter", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitItems.itemFilter), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeFilter).setNoText()).setImportant(); //RF Using Items - new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeDrill).setNoText(), new PageCrafting(3, ItemCrafting.RECIPES_DRILL_COLORING), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); + new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeDrill).setNoText(), new PageCrafting(4, ItemCrafting.RECIPES_DRILL_COLORING), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); new BookletChapter("staff", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemTeleStaff), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeStaff).setNoText()).setImportant(); new BookletChapter("magnetRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemMagnetRing), new PageCrafting(1, ItemCrafting.recipeMagnetRing)); new BookletChapter("growthRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemGrowthRing), new PageCrafting(1, ItemCrafting.recipeGrowthRing)); diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index c96264391..19eabdd86 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -812,7 +812,8 @@ booklet.actuallyadditions.chapter.potionRings.text.1=The Potion Rings h booklet.actuallyadditions.chapter.drill.name=Drills booklet.actuallyadditions.chapter.drill.text.1=The Drill works like a Pickaxe and a Shovel. It uses RF per block. It can be charged in an Energizer and upgraded by right-clicking with it in your hand. There is a lot of upgrades, but here is an explanation of some of them: The Mining Uprgades enlarge the hole which the Drill digs. The Placement Upgrade, after you right-click it in any slot of your hotbar, will make the Drill able to place a block from that slot by right-clicking. You can also put a Battery inside the Drill to give it more charge. -booklet.actuallyadditions.chapter.drill.text.3=The Drill can also be dyed in Minecraft's 16 colors. It's only cosmetic and won't have any effect other than it looking different, however. +booklet.actuallyadditions.chapter.drill.text.2=It should be noted that, in fact, the Speed, Mining and Fortune Upgrades need their previous tiers to be installed for them to work. This means that, if you want Speed III in the Drill, it needs Speed II and Speed I inside it as well. +booklet.actuallyadditions.chapter.drill.text.4=The Drill can also be dyed in Minecraft's 16 colors. It's only cosmetic and won't have any effect other than it looking different, however. booklet.actuallyadditions.chapter.staff.name=Staff booklet.actuallyadditions.chapter.staff.text.1=The Teleport Staff, when charged in an Energizer, can be right-clicked to teleport you to where you're looking. When you are looking at a block, it will teleport you there, however, when you aren't looking at a block, you can only be looking upwards up to 5 degrees, otherwise the teleport will fail. From edf870403f0a330feaba66541dcefb00edb97969 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 17 Jul 2016 13:27:20 +0200 Subject: [PATCH 27/34] Made Drill coloring not lose all of the NBT. Closes #153 --- .../mod/booklet/InitBooklet.java | 2 +- .../mod/crafting/InitCrafting.java | 7 + .../mod/crafting/ItemCrafting.java | 11 +- .../mod/crafting/RecipeDrillColor.java | 121 ++++++++++++++++++ .../assets/actuallyadditions/lang/en_US.lang | 3 +- 5 files changed, 131 insertions(+), 13 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/crafting/RecipeDrillColor.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 852e908b8..8f51a654b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -150,7 +150,7 @@ public final class InitBooklet{ new BookletChapter("itemFilter", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitItems.itemFilter), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeFilter).setNoText()).setImportant(); //RF Using Items - new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeDrill).setNoText(), new PageCrafting(4, ItemCrafting.RECIPES_DRILL_COLORING), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); + new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeDrill).setNoText(), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); new BookletChapter("staff", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemTeleStaff), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeStaff).setNoText()).setImportant(); new BookletChapter("magnetRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemMagnetRing), new PageCrafting(1, ItemCrafting.recipeMagnetRing)); new BookletChapter("growthRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemGrowthRing), new PageCrafting(1, ItemCrafting.recipeGrowthRing)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java index 557820a78..4af7432bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java @@ -11,11 +11,15 @@ package de.ellpeck.actuallyadditions.mod.crafting; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.oredict.RecipeSorter; public final class InitCrafting{ @@ -30,6 +34,9 @@ public final class InitCrafting{ ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemMisc, 10, TheMiscItems.MASHED_FOOD.ordinal()), Blocks.LEAVES, new ItemStack(InitItems.itemFertilizer, 10), Blocks.DIRT); ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemCanolaSeed, 20), Blocks.DIRT, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BIOMASS.ordinal()), Blocks.SOUL_SAND); + + RecipeSorter.register(ModUtil.MOD_ID+":drillColoring", RecipeDrillColor.class, RecipeSorter.Category.SHAPELESS, ""); + GameRegistry.addRecipe(new RecipeDrillColor()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 2ad63e56a..0a5ece827 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -37,7 +37,6 @@ import java.util.ArrayList; public final class ItemCrafting{ public static final ArrayList RECIPES_MASHED_FOOD = new ArrayList(); - public static final ArrayList RECIPES_DRILL_COLORING = new ArrayList(); public static final ArrayList RECIPES_POTION_RINGS = new ArrayList(); public static IRecipe recipePhantomConnector; public static IRecipe recipeCoil; @@ -181,21 +180,13 @@ public final class ItemCrafting{ //Drill if(ConfigCrafting.DRILL.isEnabled()){ - ItemStack lightBlueDrill = new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()); - GameRegistry.addRecipe(new ShapedOreRecipe(lightBlueDrill.copy(), + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), "DDD", "CRC", "III", 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DRILL_CORE.ordinal()), 'I', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()))); recipeDrill = RecipeUtil.lastIRecipe(); - - for(int i = 0; i < 16; i++){ - if(i != TheColoredLampColors.LIGHT_BLUE.ordinal()){ - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemDrill, 1, i), lightBlueDrill.copy(), "dye"+TheColoredLampColors.values()[i].name)); - RECIPES_DRILL_COLORING.add(RecipeUtil.lastIRecipe()); - } - } } //Drill Core diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/RecipeDrillColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/RecipeDrillColor.java new file mode 100644 index 000000000..94595068a --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/RecipeDrillColor.java @@ -0,0 +1,121 @@ +/* + * This file ("RecipeDrillColor.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.crafting; + +import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; +import de.ellpeck.actuallyadditions.mod.items.ItemDrill; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.oredict.OreDictionary; + +import javax.annotation.Nullable; + +public class RecipeDrillColor implements IRecipe{ + + @Override + public boolean matches(InventoryCrafting inv, World worldIn){ + boolean hasDrill = false; + boolean hasColor = false; + + for(int i = 0; i < inv.getSizeInventory(); i++){ + ItemStack stack = inv.getStackInSlot(i); + if(stack != null && stack.getItem() != null){ + if(stack.getItem() instanceof ItemDrill){ + if(!hasDrill){ + hasDrill = true; + } + else{ + return false; + } + } + else{ + int[] ids = OreDictionary.getOreIDs(stack); + if(ids != null){ + for(int id : ids){ + String name = OreDictionary.getOreName(id); + if(name != null){ + TheColoredLampColors color = TheColoredLampColors.getColorFromDyeName(name); + if(color != null){ + if(!hasColor){ + hasColor = true; + } + else{ + return false; + } + } + } + } + } + } + } + } + + return hasDrill && hasColor; + } + + @Nullable + @Override + public ItemStack getCraftingResult(InventoryCrafting inv){ + ItemStack drillStack = null; + ItemStack colorStack = null; + + for(int i = 0; i < inv.getSizeInventory(); i++){ + ItemStack stack = inv.getStackInSlot(i); + if(stack != null && stack.getItem() != null){ + if(stack.getItem() instanceof ItemDrill){ + drillStack = stack.copy(); + } + else{ + colorStack = stack.copy(); + } + } + } + + if(drillStack != null && colorStack != null){ + int[] ids = OreDictionary.getOreIDs(colorStack); + if(ids != null){ + for(int id : ids){ + String name = OreDictionary.getOreName(id); + if(name != null){ + TheColoredLampColors color = TheColoredLampColors.getColorFromDyeName(name); + if(color != null){ + if(color.ordinal() != drillStack.getItemDamage()){ + drillStack.setItemDamage(color.ordinal()); + return drillStack; + } + } + } + } + } + } + + return null; + } + + @Override + public int getRecipeSize(){ + return 2; + } + + @Nullable + @Override + public ItemStack getRecipeOutput(){ + return null; + } + + @Override + public ItemStack[] getRemainingItems(InventoryCrafting inv){ + return ForgeHooks.defaultRecipeGetRemainingItems(inv); + } +} diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 19eabdd86..f26aaf7dc 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -812,8 +812,7 @@ booklet.actuallyadditions.chapter.potionRings.text.1=The Potion Rings h booklet.actuallyadditions.chapter.drill.name=Drills booklet.actuallyadditions.chapter.drill.text.1=The Drill works like a Pickaxe and a Shovel. It uses RF per block. It can be charged in an Energizer and upgraded by right-clicking with it in your hand. There is a lot of upgrades, but here is an explanation of some of them: The Mining Uprgades enlarge the hole which the Drill digs. The Placement Upgrade, after you right-click it in any slot of your hotbar, will make the Drill able to place a block from that slot by right-clicking. You can also put a Battery inside the Drill to give it more charge. -booklet.actuallyadditions.chapter.drill.text.2=It should be noted that, in fact, the Speed, Mining and Fortune Upgrades need their previous tiers to be installed for them to work. This means that, if you want Speed III in the Drill, it needs Speed II and Speed I inside it as well. -booklet.actuallyadditions.chapter.drill.text.4=The Drill can also be dyed in Minecraft's 16 colors. It's only cosmetic and won't have any effect other than it looking different, however. +booklet.actuallyadditions.chapter.drill.text.2=It should be noted that, in fact, the Speed, Mining and Fortune Upgrades need their previous tiers to be installed for them to work. This means that, if you want Speed III in the Drill, it needs Speed II and Speed I inside it as well. Additionally, the Drill can also be dyed in Minecraft's 16 colors by crafting it together with one. It's only cosmetic and won't have any effect other than it looking different, however. booklet.actuallyadditions.chapter.staff.name=Staff booklet.actuallyadditions.chapter.staff.text.1=The Teleport Staff, when charged in an Energizer, can be right-clicked to teleport you to where you're looking. When you are looking at a block, it will teleport you there, however, when you aren't looking at a block, you can only be looking upwards up to 5 degrees, otherwise the teleport will fail. From 8b0a5eb7995de7548ef06ddd6d392df85d4bc490 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 17 Jul 2016 13:34:38 +0200 Subject: [PATCH 28/34] Override getToolClasses() in tools so that they work with basically every mod that needs it to work. Duh. --- .../de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java | 6 ++++++ .../ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java | 6 ++++++ .../ellpeck/actuallyadditions/mod/items/ItemShovelAA.java | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java index 0c31cf28a..c728e1d76 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java @@ -20,6 +20,7 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import java.util.Collections; import java.util.Set; public class ItemAxeAA extends ItemToolAA{ @@ -39,4 +40,9 @@ public class ItemAxeAA extends ItemToolAA{ Material material = state.getMaterial(); return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; } + + @Override + public Set getToolClasses(ItemStack stack){ + return Collections.singleton("axe"); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java index 79019a955..7f7e7d85d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java @@ -20,6 +20,7 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import java.util.Collections; import java.util.Set; public class ItemPickaxeAA extends ItemToolAA{ @@ -80,4 +81,9 @@ public class ItemPickaxeAA extends ItemToolAA{ Material material = state.getMaterial(); return material != Material.IRON && material != Material.ANVIL && material != Material.ROCK ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; } + + @Override + public Set getToolClasses(ItemStack stack){ + return Collections.singleton("pickaxe"); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java index cfaa63932..4fca08cb9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -26,6 +26,7 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import java.util.Collections; import java.util.Set; public class ItemShovelAA extends ItemToolAA{ @@ -51,4 +52,9 @@ public class ItemShovelAA extends ItemToolAA{ public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ return Items.IRON_SHOVEL.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ); } + + @Override + public Set getToolClasses(ItemStack stack){ + return Collections.singleton("shovel"); + } } From 76ef35da2e3969329dd20d4ffe765afdf44c8f8f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 17 Jul 2016 14:09:57 +0200 Subject: [PATCH 29/34] Player Probe recipe and doc and Energy Laser Relay recipes --- .../mod/booklet/InitBooklet.java | 3 ++- .../mod/config/values/ConfigCrafting.java | 1 + .../mod/crafting/BlockCrafting.java | 16 ++++++++++++++++ .../mod/crafting/ItemCrafting.java | 12 ++++++++++++ .../assets/actuallyadditions/lang/en_US.lang | 7 +++++-- 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 8f51a654b..b1f64333a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -108,7 +108,7 @@ public final class InitBooklet{ //RF Using Blocks new BookletChapter("fireworkBox", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockFireworkBox), new PageTextOnly(1).addTextReplacement("", TileEntityFireworkBox.USE_PER_SHOT), new PageCrafting(2, BlockCrafting.recipeFireworkBox)).setSpecial(); - new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("", TileEntityLaserRelay.MAX_DISTANCE), new PageTextOnly(2).addTextReplacement("", TileEntityLaserRelayEnergy.CAP).addTextReplacement("", TileEntityLaserRelayEnergyAdvanced.CAP).addTextReplacement("", TileEntityLaserRelayEnergyExtreme.CAP), new PagePicture(3, "pageLaserRelay", 0).setNoText(), new PageCrafting(4, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeLaserWrench)).setImportant(); + new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("", TileEntityLaserRelay.MAX_DISTANCE), new PageTextOnly(2).addTextReplacement("", TileEntityLaserRelayEnergy.CAP).addTextReplacement("", TileEntityLaserRelayEnergyAdvanced.CAP).addTextReplacement("", TileEntityLaserRelayEnergyExtreme.CAP), new PagePicture(3, "pageLaserRelay", 0).setNoText(), new PageCrafting(4, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(5, BlockCrafting.recipeLaserRelayAdvanced).setNoText().setPageStacksWildcard(), new PageCrafting(6, BlockCrafting.recipeLaserRelayExtreme).setNoText().setPageStacksWildcard(), new PageCrafting(7, ItemCrafting.recipeLaserWrench)).setImportant(); new BookletChapter("miner", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockMiner), new PageTextOnly(1).addTextReplacement("", TileEntityMiner.ENERGY_USE_PER_BLOCK).addTextReplacement("", TileEntityMiner.DEFAULT_RANGE), new PageCrafting(2, BlockCrafting.recipeMiner)).setSpecial(); new BookletChapterCoffee("coffeeMachine", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("", TileEntityCoffeeMachine.ENERGY_USED).addTextReplacement("", TileEntityCoffeeMachine.CACHE_USE).addTextReplacement("", TileEntityCoffeeMachine.WATER_USE), new PageTextOnly(2).setStacks(new ItemStack(InitItems.itemCoffee)), new PagePicture(3, "pageCoffeeMachine", 115), new PageCrafting(4, BlockCrafting.recipeCoffeeMachine).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeCup).setNoText()).setImportant(); new BookletChapterCrusher("crusher", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockGrinderDouble), new PageTextOnly(1).addTextReplacement("", TileEntityGrinder.ENERGY_USE), new PageCrafting(2, BlockCrafting.recipeCrusher).setNoText().setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeDoubleCrusher).setNoText().setPageStacksWildcard(), new PageCrusherRecipe(4, CrusherCrafting.recipeIronHorseArmor).setNoText(), new PageCrusherRecipe(5, CrusherCrafting.recipeGoldHorseArmor).setNoText(), new PageCrusherRecipe(6, CrusherCrafting.recipeDiamondHorseArmor).setNoText()); @@ -131,6 +131,7 @@ public final class InitBooklet{ new BookletChapter("wings", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemWingsOfTheBats), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BAT_WING.ordinal())), new PageCrafting(2, ItemCrafting.recipeWings).setNoText()).setSpecial(); new BookletChapter("foods", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemFoods, 1, TheFoods.HAMBURGER.ordinal()), new PageCrafting(1, FoodCrafting.recipeBacon).setNoText(), new PageFurnace(2, new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE_BREAD.ordinal())).setNoText(), new PageCrafting(3, FoodCrafting.recipeHamburger).setNoText(), new PageCrafting(4, FoodCrafting.recipeBigCookie).setNoText(), new PageCrafting(5, FoodCrafting.recipeSubSandwich).setNoText(), new PageCrafting(6, FoodCrafting.recipeFrenchFry).setNoText(), new PageCrafting(7, FoodCrafting.recipeFrenchFries).setNoText(), new PageCrafting(8, FoodCrafting.recipeFishNChips).setNoText(), new PageCrafting(9, FoodCrafting.recipeCheese).setNoText(), new PageCrafting(10, FoodCrafting.recipePumpkinStew).setNoText(), new PageCrafting(11, FoodCrafting.recipeCarrotJuice).setNoText(), new PageCrafting(12, FoodCrafting.recipeSpaghetti).setNoText(), new PageCrafting(13, FoodCrafting.recipeNoodle).setNoText(), new PageCrafting(14, FoodCrafting.recipeChocolate).setNoText(), new PageCrafting(15, FoodCrafting.recipeChocolateCake).setNoText(), new PageCrafting(16, FoodCrafting.recipeToast).setNoText(), new PageFurnace(17, new ItemStack(InitItems.itemFoods, 1, TheFoods.BAGUETTE.ordinal())).setNoText(), new PageCrafting(18, FoodCrafting.recipeChocolateToast).setNoText(), new PageCrafting(1, FoodCrafting.recipePizza).setNoText()); new BookletChapter("leafBlower", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemLeafBlowerAdvanced), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLeafBlower).setNoText(), new PageCrafting(3, ItemCrafting.recipeLeafBlowerAdvanced).setNoText()).setImportant(); + new BookletChapter("playerProbe", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemPlayerProbe), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipePlayerProbe).setNoText()).setSpecial(); ArrayList aiotPages = new ArrayList(); aiotPages.add(new PageTextOnly(aiotPages.size()+1)); for(IRecipe recipe : ToolCrafting.RECIPES_PAXELS){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java index 610eeb5cc..747f4b384 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java @@ -98,6 +98,7 @@ public enum ConfigCrafting{ PHANTOMFACE("Phantomface", ConfigCategories.BLOCKS_CRAFTING), PHANTOM_CONNECTOR("Phantom Connector", ConfigCategories.ITEMS_CRAFTING), PLAYER_INTERFACE("Player Interface", ConfigCategories.BLOCKS_CRAFTING), + PLAYER_PROBE("Player Probe", ConfigCategories.ITEMS_CRAFTING), PHANTOM_ENERGYFACE("Phantom Energyface", ConfigCategories.BLOCKS_CRAFTING), PHANTOM_REDSTONEFACE("Phantom Redstoneface", ConfigCategories.BLOCKS_CRAFTING), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index 6205c3b20..b60ac6224 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -80,6 +80,8 @@ public final class BlockCrafting{ public static IRecipe recipeDropper; public static IRecipe recipeRangedCollector; public static IRecipe recipeLaserRelay; + public static IRecipe recipeLaserRelayAdvanced; + public static IRecipe recipeLaserRelayExtreme; public static IRecipe recipeAtomicReconstructor; public static IRecipe recipeMiner; public static IRecipe recipeFireworkBox; @@ -222,6 +224,20 @@ public final class BlockCrafting{ 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); recipeLaserRelay = RecipeUtil.lastIRecipe(); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockLaserRelayAdvanced), + " I ", "XRX", " I ", + 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), + 'R', new ItemStack(InitBlocks.blockLaserRelay), + 'X', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()))); + recipeLaserRelayAdvanced = RecipeUtil.lastIRecipe(); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockLaserRelayExtreme), + " I ", "XRX", " I ", + 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), + 'R', new ItemStack(InitBlocks.blockLaserRelayAdvanced), + 'X', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()))); + recipeLaserRelayExtreme = RecipeUtil.lastIRecipe(); } //Item Laser Relay diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 0a5ece827..57a0c6103 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -82,6 +82,7 @@ public final class ItemCrafting{ public static IRecipe recipeEnderStar; public static IRecipe recipeSpawnerChanger; public static IRecipe recipeFilter; + public static IRecipe recipePlayerProbe; public static void init(){ @@ -441,6 +442,17 @@ public final class ItemCrafting{ recipePhantomConnector = RecipeUtil.lastIRecipe(); } + //Player Probe + if(ConfigCrafting.PLAYER_PROBE.isEnabled()){ + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemPlayerProbe), + "A A", "AIA", "RHR", + 'A', new ItemStack(Blocks.IRON_BARS), + 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), + 'H', new ItemStack(Items.SKULL, 1, 1), + 'I', new ItemStack(Items.IRON_HELMET))); + recipePlayerProbe = RecipeUtil.lastIRecipe(); + } + //Quartz GameRegistry.addSmelting(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal()), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), 1F); diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index f26aaf7dc..eca2988ca 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -850,7 +850,7 @@ booklet.actuallyadditions.chapter.hairBalls.text.2=Balls of Fur are an booklet.actuallyadditions.chapter.laserRelays.name=Energy Laser Relays booklet.actuallyadditions.chapter.laserRelays.text.1=The Energy Laser Relay is a block that can wirelessly transfer RF (or Tesla) just by being connected with a Laser Wrench, generating a network. When placing a Power Generator or Receiver next to the relay, it can receive Power from any other relay in the network. This system always works in both directions simultaneously. Two relays can be at most blocks apart. During an energy transfer, they have a light Energy Loss, but nothing to worry about. booklet.actuallyadditions.chapter.laserRelays.text.2=There are three tiers of Energy Laser Relay. They have different maximum amounts of energy to be transferred through them in one tick. The energy caps are, in order, , , and . Additionally, the energy loss is a bit higher every tier. Interconnecting different tiers is possible, however the lowest cap and highest loss of the two relays connected to the blocks involved in the transfer is considered. -booklet.actuallyadditions.chapter.laserRelays.text.5=The Laser Wrench's mode can be switched by sneak-right-clicking it anywhere. Possible modes are to always show lasers, never show lasers or only show lasers when holding the wrench. +booklet.actuallyadditions.chapter.laserRelays.text.7=The Laser Wrench's mode can be switched by sneak-right-clicking it anywhere. Possible modes are to always show lasers, never show lasers or only show lasers when holding the wrench. booklet.actuallyadditions.chapter.blackLotus.name=Black Lotus booklet.actuallyadditions.chapter.blackLotus.text.1=Think of this: You need to craft black wool, black clay or anything else that needs black dye but you are just guilty about killing so many innocent squids? Well, the Black Lotus is exactly the thing you need! Just look around in the wild a bit, and you will find one, then being able to craft some Black Dye that can be used instead of Ink Sacs so that you don't need to kill poor squids and L any longer. @@ -932,4 +932,7 @@ booklet.actuallyadditions.chapter.shockSuppressor.text.1=The Shock Absorbe booklet.actuallyadditions.chapter.shockSuppressor.text.2=Credit where credit is due: Or something like that. Anyways, this thing was thought up and suggested to me by praetoras. Thanks for that brilliant idea! What's a fourth wall..? booklet.actuallyadditions.chapter.tinyTorch.name=Tiny Torch -booklet.actuallyadditions.chapter.tinyTorch.text.1=Yea. \ No newline at end of file +booklet.actuallyadditions.chapter.tinyTorch.text.1=Yea. + +booklet.actuallyadditions.chapter.playerProbe.name=Player Probe +booklet.actuallyadditions.chapter.playerProbe.text.1=The Player Probe can be used to change the player a Player Interface is connected to. If you don't know what the Player Interface does, look it up in here first! To use the Player Probe, simply right-click any player with it and then right-click the interface. But watch out! The Probe will notify the player and disconenct from him whenever he sneaks and will also do so when he leaves the server! Shenanigans \ No newline at end of file From 60266c0505f8f524ed32482959842dfb4292ecbf Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 17 Jul 2016 14:16:08 +0200 Subject: [PATCH 30/34] r51~ --- build.gradle | 2 +- update/changelog.md | 11 +++++++++++ update/updateVersions.properties | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 948af4684..583d9a59c 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.10.2-r50" +version = "1.10.2-r51" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index fb9984d59..f8583aa39 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,14 @@ +# 1.10.2-r51 +* Made TiCon Rapier be able to be repaired in the Item Repairer +* Added Player Probe +* Renamed Mashed Food to bio mash +* Made the booklet search bar search a whole item's tooltip and not just the name +* Added different Energy Laser Relays for different amounts of power transfer +* Added Tiny Torch +* Booklet now states that the drill needs previous tiers of upgrades +* Made drill coloring not use all of the nbt, meaning you can color a drill without the upgrades being gone +* Made ActAdd tools work in hopefully most automatic farms etc. + # 1.10.2-r50 * Changed the name of the coffee machine to coffee maker because that's apparently a more proper name * Fixed the drill sometimes acting up on redstone and glowstone diff --git a/update/updateVersions.properties b/update/updateVersions.properties index cb8cbadb2..78ea18ead 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -3,4 +3,4 @@ 1.9=33 1.9.4=45 1.10=46 -1.10.2=50 \ No newline at end of file +1.10.2=51 \ No newline at end of file From fa9ada8f8281a0214634dcaeebf5d9b50a46ed3e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 17 Jul 2016 16:53:09 +0200 Subject: [PATCH 31/34] Fixed log spam when switching worlds Closes #157 --- .../ellpeck/actuallyadditions/mod/event/CommonEvents.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java index 0a53fc410..67c1951d8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java @@ -92,9 +92,9 @@ public class CommonEvents{ } @SubscribeEvent - public void onLogInEvent(EntityJoinWorldEvent event){ - if(!event.getEntity().worldObj.isRemote && event.getEntity() instanceof EntityPlayerMP){ - EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); + public void onLogInEvent(PlayerEvent.PlayerLoggedInEvent event){ + if(!event.player.worldObj.isRemote && event.player instanceof EntityPlayerMP){ + EntityPlayerMP player = (EntityPlayerMP)event.player; PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); if(!data.theCompound.hasNoTags()){ NBTTagCompound compound = new NBTTagCompound(); From 51bca2305fbb17f1dff718abc29fd2d8f0d12c91 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 18 Jul 2016 00:27:23 +0200 Subject: [PATCH 32/34] Made JEI know about the drills so that people don't think "wtf how do I craft dis shit" --- .../de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index b1f64333a..604405ffa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -151,7 +151,7 @@ public final class InitBooklet{ new BookletChapter("itemFilter", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitItems.itemFilter), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeFilter).setNoText()).setImportant(); //RF Using Items - new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeDrill).setNoText(), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); + new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeDrill).setNoText().setPageStacksWildcard(), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); new BookletChapter("staff", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemTeleStaff), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeStaff).setNoText()).setImportant(); new BookletChapter("magnetRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemMagnetRing), new PageCrafting(1, ItemCrafting.recipeMagnetRing)); new BookletChapter("growthRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemGrowthRing), new PageCrafting(1, ItemCrafting.recipeGrowthRing)); From 07a9c9b10db32acea932eca90ac00393c91427c7 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 18 Jul 2016 02:08:24 +0200 Subject: [PATCH 33/34] Disallow bosses to be spawner changed. Thanks to Dan for noticing it. --- .../actuallyadditions/mod/items/ItemSpawnerChanger.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index f2d9774ac..8680c6ba8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -30,6 +30,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.BossInfo; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.BlockEvent; @@ -106,7 +107,7 @@ public class ItemSpawnerChanger extends ItemBase{ stack.setTagCompound(new NBTTagCompound()); } - if(!(entity instanceof EntityPlayer)){ + if(!(entity instanceof EntityPlayer) && !entity.isNonBoss()){ String entityName = EntityList.getEntityString(entity); if(entityName != null && !entityName.isEmpty()){ for(String name : ConfigStringListValues.SPAWNER_CHANGER_BLACKLIST.getValue()){ From 15a06080550254b8fa2f907c2f8e79ccbee76a56 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 18 Jul 2016 02:09:41 +0200 Subject: [PATCH 34/34] Reverse. Fricker. --- .../ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index 8680c6ba8..b1d0c7b4b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -107,7 +107,7 @@ public class ItemSpawnerChanger extends ItemBase{ stack.setTagCompound(new NBTTagCompound()); } - if(!(entity instanceof EntityPlayer) && !entity.isNonBoss()){ + if(!(entity instanceof EntityPlayer) && entity.isNonBoss()){ String entityName = EntityList.getEntityString(entity); if(entityName != null && !entityName.isEmpty()){ for(String name : ConfigStringListValues.SPAWNER_CHANGER_BLACKLIST.getValue()){