mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-09-27 11:21:05 +02:00
141 lines
5.1 KiB
Java
141 lines
5.1 KiB
Java
/*
|
|
* This file ("ItemRarmorModuleReconstructor.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 cofh.api.energy.IEnergyContainerItem;
|
|
import de.canitzp.rarmor.api.InventoryBase;
|
|
import de.canitzp.rarmor.api.modules.IRarmorModule;
|
|
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
|
|
import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor;
|
|
import de.ellpeck.actuallyadditions.api.lens.Lens;
|
|
import de.ellpeck.actuallyadditions.api.lens.LensConversion;
|
|
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<String> getGuiHelp(){
|
|
List text = new ArrayList<String>();
|
|
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){
|
|
IAtomicReconstructor fake = this.getFakeReconstructor(world, player, armorChestplate);
|
|
RayTraceResult result = WorldUtil.getNearestPositionWithAir(world, player, fake.getLens().getDistance());
|
|
if(result != null){
|
|
BlockPos pos = result.getBlockPos();
|
|
if(pos != null){
|
|
int energyUse = TileEntityAtomicReconstructor.ENERGY_USE*2;
|
|
if(fake.getEnergy() >= energyUse){
|
|
fake.getLens().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(), fake.getLens());
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Lens getLens(){
|
|
return ActuallyAdditionsAPI.lensDefaultConversion;
|
|
}
|
|
};
|
|
}
|
|
}
|