From f21fa7e317e1fb34f89ae83b8aa94b4c109a106d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 16:11:26 +0200 Subject: [PATCH] Added Reconstruction Module as Rarmor integration --- build.gradle | 1 + .../mod/ActuallyAdditions.java | 3 +- .../mod/creative/CreativeTab.java | 9 +- .../mod/items/InitItems.java | 7 + .../items/ItemRarmorModuleReconstructor.java | 124 ++++++++++++++++++ .../mod/items/base/ItemBase.java | 2 - .../mod/network/PacketParticle.java | 46 +++---- .../tile/TileEntityAtomicReconstructor.java | 10 +- .../assets/actuallyadditions/lang/en_US.lang | 1 + .../item/itemRarmorModuleReconstructor.json | 6 + .../items/itemRarmorModuleReconstructor.png | Bin 0 -> 463 bytes 11 files changed, 175 insertions(+), 34 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemRarmorModuleReconstructor.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemRarmorModuleReconstructor.png diff --git a/build.gradle b/build.gradle index a20a28273..7fc4ce787 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,7 @@ dependencies { //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" deobfCompile "mezz.jei:jei_1.9:3.3.3.197" + compile file "lib/Rarmor.jar" } processResources { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index ca3b1340d..b43b14750 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -128,9 +128,8 @@ public class ActuallyAdditions{ @EventHandler public void missingMapping(FMLMissingMappingsEvent event){ for(FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()){ - //Ignore removal of foreign paxels if(mapping.name != null && mapping.name.toLowerCase(Locale.ROOT).startsWith(ModUtil.MOD_ID+":")){ - if(mapping.name.contains("paxel") || mapping.name.contains("itemSpecial") || mapping.name.contains("blockBookStand")){ + if(mapping.name.contains("paxel") || mapping.name.contains("itemSpecial") || mapping.name.contains("blockBookStand") || mapping.name.contains("Rarmor")){ mapping.ignore(); ModUtil.LOGGER.info("Missing Mapping "+mapping.name+" is getting ignored. This is intentional."); } 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 bbe32fa5e..457e5c375 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -191,6 +191,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemPaxelCrystalBlack); this.add(InitItems.itemPaxelCrystalGreen); this.add(InitItems.itemPaxelCrystalWhite); + this.add(InitItems.itemRarmorModuleReconstructor); InitForeignPaxels.addToCreativeTab(); this.add(InitBlocks.blockCrystal); @@ -296,10 +297,14 @@ public class CreativeTab extends CreativeTabs{ } public void add(Item item){ - item.getSubItems(item, instance, this.list); + if(item != null){ + item.getSubItems(item, instance, this.list); + } } public void add(Block block){ - block.getSubBlocks(new ItemStack(block).getItem(), instance, this.list); + if(block != null){ + block.getSubBlocks(new ItemStack(block).getItem(), instance, this.list); + } } } 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 1a58b8100..2967ad146 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -29,6 +29,7 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fml.common.Loader; public class InitItems{ @@ -205,6 +206,8 @@ public class InitItems{ public static Item itemBootsCrystalWhite; public static Item itemPaxelCrystalWhite; + public static Item itemRarmorModuleReconstructor; + public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); @@ -366,5 +369,9 @@ public class InitItems{ itemPantsCrystalWhite = new ItemArmorAA("itemPantsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); itemBootsCrystalWhite = new ItemArmorAA("itemBootsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); itemPaxelCrystalWhite = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemPaxelCrystalWhite", Util.CRYSTAL_WHITE_RARITY, 14606302); + + if(Loader.isModLoaded("rarmor")){ + itemRarmorModuleReconstructor = new ItemRarmorModuleReconstructor("itemRarmorModuleReconstructor"); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java new file mode 100644 index 000000000..93fbe876a --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java @@ -0,0 +1,124 @@ +package de.ellpeck.actuallyadditions.mod.items; + +import cofh.api.energy.IEnergyContainerItem; +import de.canitzp.rarmor.api.InventoryBase; +import de.canitzp.rarmor.api.modules.IRarmorModule; +import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; +import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.Optional; + +import java.util.ArrayList; +import java.util.List; + +@Optional.Interface(modid = "rarmor", iface = "de.canitzp.rarmor.api.modules.IRarmorModule") +public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorModule{ + + public ItemRarmorModuleReconstructor(String name){ + super(name); + + this.setMaxStackSize(1); + } + + @Override + public String getUniqueName(){ + return this.getRegistryName().toString(); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.RARE; + } + + @Override + public ModuleType getModuleType(){ + return ModuleType.ACTIVE; + } + + @Override + public List getGuiHelp(){ + List text = new ArrayList(); + text.add("Read more about this in the"); + text.add("Actually Additions Manual!"); + return text; + } + + @Override + public void onModuleTickInArmor(World world, EntityPlayer player, ItemStack armorChestplate, ItemStack module, InventoryBase inventory){ + if(!world.isRemote && player.isSneaking() && player.onGround){ + if(world.getTotalWorldTime()%50 == 0){ + RayTraceResult result = WorldUtil.getNearestPositionWithAir(world, player, Lenses.LENS_NONE.getDistance()); + if(result != null){ + BlockPos pos = result.getBlockPos(); + if(pos != null){ + IAtomicReconstructor fake = this.getFakeReconstructor(world, player, armorChestplate); + + int energyUse = TileEntityAtomicReconstructor.ENERGY_USE*2; + if(fake.getEnergy() >= energyUse){ + Lenses.LENS_NONE.invoke(world.getBlockState(pos), pos, fake); + + EnumFacing hit = result.sideHit; + TileEntityAtomicReconstructor.shootLaser(world, player.posX-player.width/2, player.posY+player.getYOffset()+player.getEyeHeight()/2, player.posZ-player.width/2, pos.getX()+hit.getFrontOffsetX(), pos.getY()+hit.getFrontOffsetY(), pos.getZ()+hit.getFrontOffsetZ(), Lenses.LENS_NONE); + + fake.extractEnergy(energyUse); + } + } + } + } + } + } + + private IAtomicReconstructor getFakeReconstructor(final World world, final EntityPlayer player, final ItemStack armorChestplate){ + return new IAtomicReconstructor(){ + @Override + public int getX(){ + return MathHelper.floor_double(player.posX); + } + + @Override + public int getY(){ + return MathHelper.floor_double(player.posY); + } + + @Override + public int getZ(){ + return MathHelper.floor_double(player.posZ); + } + + @Override + public World getWorldObject(){ + return world; + } + + @Override + public void extractEnergy(int amount){ + Item item = armorChestplate.getItem(); + if(item instanceof IEnergyContainerItem){ + ((IEnergyContainerItem)item).extractEnergy(armorChestplate, amount, false); + } + } + + @Override + public int getEnergy(){ + Item item = armorChestplate.getItem(); + if(item instanceof IEnergyContainerItem){ + return ((IEnergyContainerItem)item).getEnergyStored(armorChestplate); + } + else{ + return 0; + } + } + }; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java index bb54efc9d..6e40d567d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java @@ -12,11 +12,9 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; public class ItemBase extends Item{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java index a31c86df7..84353e695 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java @@ -23,12 +23,12 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class PacketParticle implements IMessage{ - private int startX; - private int startY; - private int startZ; - private int endX; - private int endY; - private int endZ; + private double startX; + private double startY; + private double startZ; + private double endX; + private double endY; + private double endZ; private float[] color; private int particleAmount; private float particleSize; @@ -38,7 +38,7 @@ public class PacketParticle implements IMessage{ } - public PacketParticle(int startX, int startY, int startZ, int endX, int endY, int endZ, float[] color, int particleAmount, float particleSize){ + public PacketParticle(double startX, double startY, double startZ, double endX, double endY, double endZ, float[] color, int particleAmount, float particleSize){ this.startX = startX; this.startY = startY; this.startZ = startZ; @@ -51,13 +51,13 @@ public class PacketParticle implements IMessage{ } @SideOnly(Side.CLIENT) - public static void renderParticlesFromAToB(int startX, int startY, int startZ, int endX, int endY, int endZ, int particleAmount, float particleSize, float[] color, float ageMultiplier){ + public static void renderParticlesFromAToB(double startX, double startY, double startZ, double endX, double endY, double endZ, int particleAmount, float particleSize, float[] color, float ageMultiplier){ World world = Minecraft.getMinecraft().theWorld; if(Minecraft.getMinecraft().thePlayer.getDistance(startX, startY, startZ) <= 64 || Minecraft.getMinecraft().thePlayer.getDistance(endX, endY, endZ) <= 64){ - int difX = startX-endX; - int difY = startY-endY; - int difZ = startZ-endZ; + double difX = startX-endX; + double difY = startY-endY; + double difZ = startZ-endZ; double distance = new Vec3d(startX, startY, startZ).distanceTo(new Vec3d(endX, endY, endZ)); for(int times = 0; times < particleAmount/2; times++){ @@ -71,12 +71,12 @@ public class PacketParticle implements IMessage{ @Override public void fromBytes(ByteBuf buf){ - this.startX = buf.readInt(); - this.startY = buf.readInt(); - this.startZ = buf.readInt(); - this.endX = buf.readInt(); - this.endY = buf.readInt(); - this.endZ = buf.readInt(); + this.startX = buf.readDouble(); + this.startY = buf.readDouble(); + this.startZ = buf.readDouble(); + this.endX = buf.readDouble(); + this.endY = buf.readDouble(); + this.endZ = buf.readDouble(); this.particleAmount = buf.readInt(); this.particleSize = buf.readFloat(); @@ -88,12 +88,12 @@ public class PacketParticle implements IMessage{ @Override public void toBytes(ByteBuf buf){ - buf.writeInt(this.startX); - buf.writeInt(this.startY); - buf.writeInt(this.startZ); - buf.writeInt(this.endX); - buf.writeInt(this.endY); - buf.writeInt(this.endZ); + buf.writeDouble(this.startX); + buf.writeDouble(this.startY); + buf.writeDouble(this.startZ); + buf.writeDouble(this.endX); + buf.writeDouble(this.endY); + buf.writeDouble(this.endZ); buf.writeInt(this.particleAmount); buf.writeFloat(this.particleSize); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 6af2afbec..f9f655bb9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -103,11 +103,11 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple BlockPos hitBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, i); if(currentLens.invoke(this.worldObj.getBlockState(hitBlock), hitBlock, this)){ - this.shootLaser(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); + shootLaser(this.worldObj, this.getX(), this.getY(), this.getZ(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); break; } else if(i >= distance-1){ - this.shootLaser(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); + shootLaser(this.worldObj, this.getX(), this.getY(), this.getZ(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); } } } @@ -122,11 +122,11 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple return this.counter >= 500 ? Lenses.LENS_DISRUPTION : Lenses.LENS_NONE; } - private void shootLaser(int endX, int endY, int endZ, Lens currentLens){ + public static void shootLaser(World world, double startX, double startY, double startZ, double endX, double endY, double endZ, Lens currentLens){ if(!ConfigValues.lessSound){ - this.worldObj.playSound(null, this.getX(), this.getY(), this.getZ(), SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); + world.playSound(null, startX, startY, startZ, SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); } - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getX(), this.getY(), this.getZ(), endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getX(), this.getY(), this.getZ(), 64)); + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(world.provider.getDimension(), startX, startY, startZ, 64)); } @Override diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 7cfde7be5..c256d6045 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -332,6 +332,7 @@ item.actuallyadditions.itemChestQuartz.name=Black Quartz Chestplate item.actuallyadditions.itemPantsQuartz.name=Black Quartz Pants item.actuallyadditions.itemBootsQuartz.name=Black Quartz Boots item.actuallyadditions.itemBooklet.name=Actually Additions Manual +item.actuallyadditions.itemRarmorModuleReconstructor.name=Reconstruction Module item.actuallyadditions.itemLaserWrench.name=Laser Wrench item.actuallyadditions.itemChestToCrateUpgrade.name=Chest To Storage Crate Upgrade item.actuallyadditions.itemMiscDrillCore.name=Drill Core diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemRarmorModuleReconstructor.json b/src/main/resources/assets/actuallyadditions/models/item/itemRarmorModuleReconstructor.json new file mode 100644 index 000000000..117a5e75c --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemRarmorModuleReconstructor.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemRarmorModuleReconstructor" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemRarmorModuleReconstructor.png b/src/main/resources/assets/actuallyadditions/textures/items/itemRarmorModuleReconstructor.png new file mode 100644 index 0000000000000000000000000000000000000000..6044c6497505b10a05d6b389c42cc32504631037 GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DXkiEpy*OmPNBeSTg(fOY14L~7@64!{5;QX|b z^2DN4hJwV*yb`^<)Di^~Jp(<<9OF7apgp>tE{-7<{!1tOX0Z}XS)wt literal 0 HcmV?d00001