diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDistributorItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDistributorItem.java new file mode 100644 index 000000000..f23a264fd --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDistributorItem.java @@ -0,0 +1,71 @@ +/* + * This file ("BlockDistributor.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 de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityDistributorItem; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +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.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; + +public class BlockDistributorItem extends BlockContainerBase implements IHudDisplay{ + + public BlockDistributorItem(String name){ + super(Material.ROCK, name); + + this.setHarvestLevel("pickaxe", 0); + this.setHardness(1.75F); + this.setResistance(10.0F); + this.setSoundType(SoundType.STONE); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta){ + return new TileEntityDistributorItem(); + } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state){ + this.dropInventory(world, pos); + super.breakBlock(world, pos, state); + } + + @Override + public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, ScaledResolution resolution){ + TileEntity tile = minecraft.theWorld.getTileEntity(posHit.getBlockPos()); + if(tile instanceof TileEntityDistributorItem){ + TileEntityDistributorItem distributor = (TileEntityDistributorItem)tile; + ItemStack slot = distributor.getStackInSlot(0); + + String strg; + if(slot == null){ + strg = StringUtil.localize("info."+ModUtil.MOD_ID+".noItem"); + } + else{ + strg = slot.getItem().getItemStackDisplayName(slot); + AssetUtil.renderStackToGui(slot, resolution.getScaledWidth()/2+15, resolution.getScaledHeight()/2-19, 1F); + } + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg, resolution.getScaledWidth()/2+35, resolution.getScaledHeight()/2-15, StringUtil.DECIMAL_COLOR_WHITE); + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTinyTorch.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTinyTorch.java index 512b12390..80880be69 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTinyTorch.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTinyTorch.java @@ -68,7 +68,6 @@ public class BlockTinyTorch extends BlockBase{ } @Override - @Nullable public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){ return NULL_AABB; } 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 8791763a1..46c6c145d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -126,12 +126,14 @@ public final class InitBlocks{ public static Block blockDisplayStand; public static Block blockShockSuppressor; public static Block blockEmpowerer; + public static Block blockDistributorItem; public static Block blockTinyTorch; public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); + blockDistributorItem = new BlockDistributorItem("blockDistributorItem"); blockEmpowerer = new BlockEmpowerer("blockEmpowerer"); blockTinyTorch = new BlockTinyTorch("blockTinyTorch"); blockShockSuppressor = new BlockShockSuppressor("blockShockSuppressor"); 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 a2f9e9ed6..0fa3e08ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -87,6 +87,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockCoffeeMachine); this.add(InitBlocks.blockXPSolidifier); this.add(InitBlocks.blockDisplayStand); + this.add(InitBlocks.blockDistributorItem); this.add(InitBlocks.blockShockSuppressor); this.add(InitBlocks.blockMiner); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java index ead68b035..b7fdc75e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java @@ -51,7 +51,7 @@ public class ContainerBag extends Container implements IButtonReactor{ if(this.isVoid){ this.addSlotToContainer(new SlotDeletion(this.bagInventory, 4, 64, 65){ @Override - public boolean isItemValid(@Nullable ItemStack stack){ + public boolean isItemValid(ItemStack stack){ return ContainerBag.this.filter.check(stack, ContainerBag.this.bagInventory.slots); } }); @@ -61,7 +61,7 @@ public class ContainerBag extends Container implements IButtonReactor{ for(int j = 0; j < 7; j++){ this.addSlotToContainer(new Slot(this.bagInventory, j+i*7+4, 10+j*18, 10+i*18){ @Override - public boolean isItemValid(@Nullable ItemStack stack){ + public boolean isItemValid(ItemStack stack){ return ContainerBag.this.filter.check(stack, ContainerBag.this.bagInventory.slots); } }); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java index d92771ba8..b45d5cd10 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java @@ -79,7 +79,6 @@ public class BookletRecipeWrapper extends RecipeWrapperWithButton implements IRe } - @Nullable @Override public List getTooltipStrings(int mouseX, int mouseY){ return null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java index ea9550d59..5e5423585 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java @@ -87,7 +87,6 @@ public class CoffeeMachineRecipeWrapper extends RecipeWrapperWithButton implemen } - @Nullable @Override public List getTooltipStrings(int mouseX, int mouseY){ return null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java index daec714fc..d8fd288e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java @@ -77,7 +77,6 @@ public class CrusherRecipeWrapper extends RecipeWrapperWithButton implements IRe } - @Nullable @Override public List getTooltipStrings(int mouseX, int mouseY){ return null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeWrapper.java index 1f78a5888..59016e017 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/empowerer/EmpowererRecipeWrapper.java @@ -66,7 +66,6 @@ public class EmpowererRecipeWrapper extends RecipeWrapperWithButton implements I } - @Nullable @Override public List getTooltipStrings(int mouseX, int mouseY){ return null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java index d9d564f1f..c66b4e9b3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java @@ -63,7 +63,6 @@ public class ReconstructorRecipeWrapper extends RecipeWrapperWithButton implemen } - @Nullable @Override public List getTooltipStrings(int mouseX, int mouseY){ return null; 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 3adf69fb0..7e9fc1679 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -108,6 +108,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ register(TileEntityShockSuppressor.class, "ShockSuppressor"); register(TileEntityEmpowerer.class); register(TileEntityLaserRelayFluids.class); + register(TileEntityDistributorItem.class); } private static void register(Class tileClass, String legacyName){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDistributorItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDistributorItem.java new file mode 100644 index 000000000..fa1321815 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDistributorItem.java @@ -0,0 +1,115 @@ +/* + * This file ("TileEntityDistributorItem.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; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; + +public class TileEntityDistributorItem extends TileEntityInventoryBase{ + + private int sidePutTo; + private int lastSlotAmount; + + public TileEntityDistributorItem(){ + super(1, "distributorItem"); + } + + @Override + public void updateEntity(){ + super.updateEntity(); + + if(!this.worldObj.isRemote){ + if(this.slots[0] != null){ + TileEntity tile = this.tilesAround[this.sidePutTo]; + + if(tile != null){ + EnumFacing side = EnumFacing.values()[this.sidePutTo].getOpposite(); + if(tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side)){ + IItemHandler cap = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side); + if(cap != null){ + int amountPer = this.slots[0].stackSize/5; + if(amountPer <= 0){ + amountPer = this.slots[0].stackSize; + } + ItemStack stackToPut = this.slots[0].copy(); + stackToPut.stackSize = amountPer; + + for(int i = 0; i < cap.getSlots(); i++){ + stackToPut = cap.insertItem(i, stackToPut.copy(), false); + if(stackToPut == null){ + this.slots[0].stackSize -= amountPer; + break; + } + else{ + this.slots[0].stackSize -= stackToPut.stackSize; + } + } + } + } + } + + this.sidePutTo++; + if(this.sidePutTo == 1){ + this.sidePutTo++; + } + else if(this.sidePutTo >= 6){ + this.sidePutTo = 0; + } + } + + int stackSize = this.slots[0] == null ? 0 : this.slots[0].stackSize; + if(stackSize != this.lastSlotAmount && this.sendUpdateWithInterval()){ + this.lastSlotAmount = stackSize; + } + } + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + compound.setInteger("PutSide", this.sidePutTo); + } + + @Override + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + this.sidePutTo = compound.getInteger("PutSide"); + } + + @Override + public boolean shouldSyncSlots(){ + return true; + } + + @Override + public boolean shouldSaveHandlersAround(){ + return true; + } + + @Override + public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction){ + return direction == EnumFacing.UP && this.isItemValidForSlot(index, stack); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){ + return true; + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack){ + return true; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/ItemTeslaWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/ItemTeslaWrapper.java index a857faed2..c8af2fb88 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/ItemTeslaWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/ItemTeslaWrapper.java @@ -52,12 +52,12 @@ public class ItemTeslaWrapper implements ITeslaProducer, ITeslaHolder, ITeslaCon } @Override - public boolean hasCapability(Capability capability, @Nullable EnumFacing facing){ + public boolean hasCapability(Capability capability, EnumFacing facing){ return capability == TeslaUtil.teslaProducer || capability == TeslaUtil.teslaHolder || capability == TeslaUtil.teslaConsumer; } @Override - public T getCapability(Capability capability, @Nullable EnumFacing facing){ + public T getCapability(Capability capability, EnumFacing facing){ return this.hasCapability(capability, facing) ? (T)this : null; } } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 893e42ecd..31b42c79d 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -570,6 +570,7 @@ info.actuallyadditions.gui.smartInfo=When pressing this, all items from inventor 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.noLens=No Lens +info.actuallyadditions.noItem=No Items in Buffer info.actuallyadditions.booklet.manualName.1.1=Actually Additions info.actuallyadditions.booklet.manualName.1.2=Actual Additions info.actuallyadditions.booklet.manualName.1.3=Actually Addiction