diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEnergyTile.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEnergyTile.java index 9333e0ce0..d3a3f66fa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEnergyTile.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEnergyTile.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.api.internal; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; /** @@ -18,6 +19,8 @@ import net.minecraft.world.World; */ public interface IEnergyTile{ + BlockPos getPosition(); + int getX(); int getY(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java index 92c292579..9a9425ce9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java @@ -42,6 +42,8 @@ public interface IMethodHandler{ boolean invokeConversionLens(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile); + boolean invokeReconstructor(IAtomicReconstructor tile); + boolean addCrusherRecipes(List inputs, List outputOnes, int outputOneAmounts, List outputTwos, int outputTwoAmounts, int outputTwoChance); IBookletPage generateTextPage(int id); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java index 64d6879c3..401ea0eed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.api.booklet.IBookletPage; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; +import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import de.ellpeck.actuallyadditions.mod.booklet.chapter.BookletChapter; @@ -27,7 +28,9 @@ import de.ellpeck.actuallyadditions.mod.booklet.page.PageTextOnly; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; @@ -228,6 +231,31 @@ public class MethodHandler implements IMethodHandler{ return false; } + @Override + public boolean invokeReconstructor(IAtomicReconstructor tile){ + if(tile.getEnergy() >= TileEntityAtomicReconstructor.ENERGY_USE){ + IBlockState state = tile.getWorldObject().getBlockState(tile.getPosition()); + EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(state.getBlock().getMetaFromState(state)); + Lens currentLens = tile.getLens(); + if(currentLens.canInvoke(tile, sideToManipulate, TileEntityAtomicReconstructor.ENERGY_USE)){ + tile.extractEnergy(TileEntityAtomicReconstructor.ENERGY_USE); + + int distance = currentLens.getDistance(); + for(int i = 0; i < distance; i++){ + BlockPos hitBlock = tile.getPosition().offset(sideToManipulate, i+1); + + if(currentLens.invoke(tile.getWorldObject().getBlockState(hitBlock), hitBlock, tile) || i >= distance-1){ + TileEntityAtomicReconstructor.shootLaser(tile.getWorldObject(), tile.getX(), tile.getY(), tile.getZ(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); + break; + } + } + + return true; + } + } + return false; + } + @Override public boolean addCrusherRecipes(List inputs, List outputOnes, int outputOneAmounts, List outputTwos, int outputTwoAmounts, int outputTwoChance){ boolean hasWorkedOnce = false; 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 fc8d3d381..67926e726 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -77,7 +77,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ - this.doWork(); + ActuallyAdditionsAPI.methodHandler.invokeReconstructor(this); } } else{ @@ -92,29 +92,6 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } - private void doWork(){ - if(this.storage.getEnergyStored() >= ENERGY_USE){ - IBlockState state = this.world.getBlockState(this.pos); - EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(state.getBlock().getMetaFromState(state)); - //The Lens the Reconstructor currently has installed - Lens currentLens = this.getLens(); - if(currentLens.canInvoke(this, sideToManipulate, ENERGY_USE)){ - //Extract energy for shooting the laser itself too! - this.storage.extractEnergyInternal(ENERGY_USE, false); - - int distance = currentLens.getDistance(); - for(int i = 0; i < distance; i++){ - BlockPos hitBlock = this.pos.offset(sideToManipulate, i+1); - - if(currentLens.invoke(this.world.getBlockState(hitBlock), hitBlock, this) || i >= distance-1){ - shootLaser(this.world, this.getX(), this.getY(), this.getZ(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); - break; - } - } - } - } - } - @Override public Lens getLens(){ if(StackUtil.isValid(this.slots.getStackInSlot(0))){ @@ -131,6 +108,11 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple return WorldUtil.getDirectionByPistonRotation(state.getBlock().getMetaFromState(state)); } + @Override + public BlockPos getPosition(){ + return this.pos; + } + @Override public int getX(){ return this.getPos().getX(); @@ -188,7 +170,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple @Override public void activateOnPulse(){ - this.doWork(); + ActuallyAdditionsAPI.methodHandler.invokeReconstructor(this); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFarmer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFarmer.java index 45c3d3baf..bfad5e270 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFarmer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFarmer.java @@ -154,6 +154,11 @@ public class TileEntityFarmer extends TileEntityInventoryBase implements IFarmer return WorldUtil.addToInventory(this.slots, 6, 12, stacks, actuallyDo); } + @Override + public BlockPos getPosition(){ + return this.pos; + } + @Override public int getX(){ return this.pos.getX();