mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 23:28:35 +01:00
Added dispay stand and leaf blower and potion ring integration for it
This commit is contained in:
parent
5972b516e9
commit
5895a8de1c
15 changed files with 420 additions and 26 deletions
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* This file ("IDisplayStandItem.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.api.misc;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
|
||||||
|
public interface IDisplayStandItem{
|
||||||
|
|
||||||
|
boolean update(ItemStack stack, TileEntity tile, int elapsedTicks);
|
||||||
|
|
||||||
|
int getUsePerTick(ItemStack stack, TileEntity tile, int elapsedTicks);
|
||||||
|
}
|
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
* This file ("BlockDisplayStand.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.TileEntityDisplayStand;
|
||||||
|
import net.minecraft.block.SoundType;
|
||||||
|
import net.minecraft.block.material.Material;
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.item.EnumRarity;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraft.util.EnumHand;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class BlockDisplayStand extends BlockContainerBase{
|
||||||
|
|
||||||
|
public BlockDisplayStand(String name){
|
||||||
|
super(Material.ROCK, name);
|
||||||
|
|
||||||
|
this.setHarvestLevel("pickaxe", 0);
|
||||||
|
this.setHardness(1.5F);
|
||||||
|
this.setResistance(10.0F);
|
||||||
|
this.setSoundType(SoundType.STONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createNewTileEntity(World worldIn, int meta){
|
||||||
|
return new TileEntityDisplayStand();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing par6, float par7, float par8, float par9){
|
||||||
|
if(!world.isRemote){
|
||||||
|
TileEntityDisplayStand stand = (TileEntityDisplayStand)world.getTileEntity(pos);
|
||||||
|
if(stand != null){
|
||||||
|
ItemStack display = stand.getStackInSlot(0);
|
||||||
|
if(heldItem != null){
|
||||||
|
if(display == null){
|
||||||
|
ItemStack toPut = heldItem.copy();
|
||||||
|
toPut.stackSize = 1;
|
||||||
|
stand.setInventorySlotContents(0, toPut);
|
||||||
|
player.inventory.decrStackSize(player.inventory.currentItem, 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(display != null){
|
||||||
|
player.inventory.setInventorySlotContents(player.inventory.currentItem, display.copy());
|
||||||
|
stand.setInventorySlotContents(0, null);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public boolean isOpaqueCube(IBlockState state){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakBlock(World worldIn, BlockPos pos, IBlockState state){
|
||||||
|
this.dropInventory(worldIn, pos);
|
||||||
|
super.breakBlock(worldIn, pos, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EnumRarity getRarity(ItemStack stack){
|
||||||
|
return EnumRarity.RARE;
|
||||||
|
}
|
||||||
|
}
|
|
@ -116,10 +116,12 @@ public class InitBlocks{
|
||||||
public static Block blockPillarQuartzSlab;
|
public static Block blockPillarQuartzSlab;
|
||||||
|
|
||||||
public static Block blockBookletStand;
|
public static Block blockBookletStand;
|
||||||
|
public static Block blockDisplayStand;
|
||||||
|
|
||||||
public static void init(){
|
public static void init(){
|
||||||
ModUtil.LOGGER.info("Initializing Blocks...");
|
ModUtil.LOGGER.info("Initializing Blocks...");
|
||||||
|
|
||||||
|
blockDisplayStand = new BlockDisplayStand("blockDisplayStand");
|
||||||
blockPlayerInterface = new BlockPlayerInterface("blockPlayerInterface");
|
blockPlayerInterface = new BlockPlayerInterface("blockPlayerInterface");
|
||||||
blockBookletStand = new BlockBookletStand("blockBookletStand");
|
blockBookletStand = new BlockBookletStand("blockBookletStand");
|
||||||
blockItemViewer = new BlockItemViewer("blockItemViewer");
|
blockItemViewer = new BlockItemViewer("blockItemViewer");
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* This file ("RenderDisplayStand.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.render;
|
||||||
|
|
||||||
|
import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand;
|
||||||
|
import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
|
||||||
|
import de.ellpeck.actuallyadditions.mod.util.ModUtil;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
|
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||||
|
import net.minecraft.item.ItemBlock;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
|
||||||
|
public class RenderDisplayStand extends TileEntitySpecialRenderer{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int par6){
|
||||||
|
if(!(tile instanceof TileEntityDisplayStand)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack stack = ((TileEntityDisplayStand)tile).getStackInSlot(0);
|
||||||
|
if(stack != null){
|
||||||
|
GlStateManager.pushMatrix();
|
||||||
|
GlStateManager.translate((float)x+0.5F, (float)y+1F, (float)z+0.5F);
|
||||||
|
|
||||||
|
double boop = Minecraft.getSystemTime()/800D;
|
||||||
|
GlStateManager.translate(0D, Math.sin(boop%(2*Math.PI))*0.065, 0D);
|
||||||
|
GlStateManager.rotate((float)(((boop*40D)%360)), 0, 1, 0);
|
||||||
|
|
||||||
|
float scale = stack.getItem() instanceof ItemBlock ? 0.85F : 0.65F;
|
||||||
|
GlStateManager.scale(scale, scale, scale);
|
||||||
|
try{
|
||||||
|
AssetUtil.renderItemInWorld(stack);
|
||||||
|
}
|
||||||
|
catch(Exception e){
|
||||||
|
ModUtil.LOGGER.error("Something went wrong trying to render an item in a display stand! The item is "+stack.getItem().getRegistryName()+"!", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
GlStateManager.popMatrix();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -73,6 +73,7 @@ public class CreativeTab extends CreativeTabs{
|
||||||
this.add(InitBlocks.blockPhantomBooster);
|
this.add(InitBlocks.blockPhantomBooster);
|
||||||
this.add(InitBlocks.blockCoffeeMachine);
|
this.add(InitBlocks.blockCoffeeMachine);
|
||||||
this.add(InitBlocks.blockXPSolidifier);
|
this.add(InitBlocks.blockXPSolidifier);
|
||||||
|
this.add(InitBlocks.blockDisplayStand);
|
||||||
|
|
||||||
this.add(InitBlocks.blockMiner);
|
this.add(InitBlocks.blockMiner);
|
||||||
this.add(InitBlocks.blockGreenhouseGlass);
|
this.add(InitBlocks.blockGreenhouseGlass);
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
package de.ellpeck.actuallyadditions.mod.items;
|
package de.ellpeck.actuallyadditions.mod.items;
|
||||||
|
|
||||||
|
import de.ellpeck.actuallyadditions.api.misc.IDisplayStandItem;
|
||||||
import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues;
|
import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues;
|
||||||
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
|
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.PosUtil;
|
import de.ellpeck.actuallyadditions.mod.util.PosUtil;
|
||||||
|
@ -22,6 +23,7 @@ import net.minecraft.init.SoundEvents;
|
||||||
import net.minecraft.item.EnumAction;
|
import net.minecraft.item.EnumAction;
|
||||||
import net.minecraft.item.EnumRarity;
|
import net.minecraft.item.EnumRarity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.ActionResult;
|
||||||
import net.minecraft.util.EnumActionResult;
|
import net.minecraft.util.EnumActionResult;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
|
@ -33,7 +35,7 @@ import net.minecraft.world.World;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
public class ItemLeafBlower extends ItemBase{
|
public class ItemLeafBlower extends ItemBase implements IDisplayStandItem{
|
||||||
|
|
||||||
private final boolean isAdvanced;
|
private final boolean isAdvanced;
|
||||||
|
|
||||||
|
@ -70,16 +72,22 @@ public class ItemLeafBlower extends ItemBase{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUsingTick(ItemStack stack, EntityLivingBase player, int time){
|
public void onUsingTick(ItemStack stack, EntityLivingBase player, int time){
|
||||||
if(!player.worldObj.isRemote){
|
this.doUpdate(player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ), time, stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean doUpdate(World world, int x, int y, int z, int time, ItemStack stack){
|
||||||
|
if(!world.isRemote){
|
||||||
if(time <= this.getMaxItemUseDuration(stack) && (this.isAdvanced || time%3 == 0)){
|
if(time <= this.getMaxItemUseDuration(stack) && (this.isAdvanced || time%3 == 0)){
|
||||||
//Breaks the Blocks
|
//Breaks the Blocks
|
||||||
this.breakStuff(player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ));
|
boolean broke = this.breakStuff(world, x, y, z);
|
||||||
//Plays a Minecart sounds (It really sounds like a Leaf Blower!)
|
//Plays a Minecart sounds (It really sounds like a Leaf Blower!)
|
||||||
if(!ConfigBoolValues.LESS_SOUND.isEnabled()){
|
if(!ConfigBoolValues.LESS_SOUND.isEnabled()){
|
||||||
player.worldObj.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_MINECART_RIDING, SoundCategory.PLAYERS, 0.3F, 0.001F);
|
world.playSound(null, x, y, z, SoundEvents.ENTITY_MINECART_RIDING, SoundCategory.PLAYERS, 0.3F, 0.001F);
|
||||||
}
|
}
|
||||||
|
return broke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -90,7 +98,7 @@ public class ItemLeafBlower extends ItemBase{
|
||||||
* @param y The Y Position of the Player
|
* @param y The Y Position of the Player
|
||||||
* @param z The Z Position of the Player
|
* @param z The Z Position of the Player
|
||||||
*/
|
*/
|
||||||
public void breakStuff(World world, int x, int y, int z){
|
public boolean breakStuff(World world, int x, int y, int z){
|
||||||
ArrayList<BlockPos> breakPositions = new ArrayList<BlockPos>();
|
ArrayList<BlockPos> breakPositions = new ArrayList<BlockPos>();
|
||||||
|
|
||||||
int rangeSides = 5;
|
int rangeSides = 5;
|
||||||
|
@ -130,6 +138,18 @@ public class ItemLeafBlower extends ItemBase{
|
||||||
//Drops the Items into the World
|
//Drops the Items into the World
|
||||||
world.spawnEntityInWorld(new EntityItem(world, theCoord.getX()+0.5, theCoord.getY()+0.5, theCoord.getZ()+0.5, theDrop));
|
world.spawnEntityInWorld(new EntityItem(world, theCoord.getX()+0.5, theCoord.getY()+0.5, theCoord.getZ()+0.5, theDrop));
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean update(ItemStack stack, TileEntity tile, int elapsedTicks){
|
||||||
|
return this.doUpdate(tile.getWorld(), tile.getPos().getX(), tile.getPos().getY(), tile.getPos().getZ(), elapsedTicks, stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getUsePerTick(ItemStack stack, TileEntity tile, int elapsedTicks){
|
||||||
|
return 60;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,27 +10,33 @@
|
||||||
|
|
||||||
package de.ellpeck.actuallyadditions.mod.items;
|
package de.ellpeck.actuallyadditions.mod.items;
|
||||||
|
|
||||||
|
import de.ellpeck.actuallyadditions.api.misc.IDisplayStandItem;
|
||||||
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
|
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
|
||||||
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
|
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
|
||||||
import de.ellpeck.actuallyadditions.mod.items.metalists.ThePotionRings;
|
import de.ellpeck.actuallyadditions.mod.items.metalists.ThePotionRings;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem;
|
import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
|
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
|
||||||
|
import de.ellpeck.actuallyadditions.mod.util.Util;
|
||||||
import net.minecraft.client.renderer.color.IItemColor;
|
import net.minecraft.client.renderer.color.IItemColor;
|
||||||
import net.minecraft.creativetab.CreativeTabs;
|
import net.minecraft.creativetab.CreativeTabs;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.EnumRarity;
|
import net.minecraft.item.EnumRarity;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.potion.Potion;
|
import net.minecraft.potion.Potion;
|
||||||
import net.minecraft.potion.PotionEffect;
|
import net.minecraft.potion.PotionEffect;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ItemPotionRing extends ItemBase implements IColorProvidingItem{
|
public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDisplayStandItem{
|
||||||
|
|
||||||
public static final ThePotionRings[] allRings = ThePotionRings.values();
|
public static final ThePotionRings[] allRings = ThePotionRings.values();
|
||||||
|
|
||||||
|
@ -62,25 +68,12 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{
|
||||||
if(!world.isRemote && stack.getItemDamage() < allRings.length){
|
if(!world.isRemote && stack.getItemDamage() < allRings.length){
|
||||||
if(player instanceof EntityPlayer){
|
if(player instanceof EntityPlayer){
|
||||||
EntityPlayer thePlayer = (EntityPlayer)player;
|
EntityPlayer thePlayer = (EntityPlayer)player;
|
||||||
ItemStack equippedStack = ((EntityPlayer)player).getHeldItemMainhand();
|
ItemStack equippedStack = thePlayer.getHeldItemMainhand();
|
||||||
|
this.effectEntity(thePlayer, stack, equippedStack != null && stack == equippedStack);
|
||||||
ThePotionRings effect = ThePotionRings.values()[stack.getItemDamage()];
|
|
||||||
Potion potion = Potion.getPotionById(effect.effectID);
|
|
||||||
if(!effect.needsWaitBeforeActivating || !thePlayer.isPotionActive(potion)){
|
|
||||||
if(!((ItemPotionRing)stack.getItem()).isAdvanced){
|
|
||||||
if(equippedStack != null && stack == equippedStack){
|
|
||||||
thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.normalAmplifier, true, false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.advancedAmplifier, true, false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getItemStackDisplayName(ItemStack stack){
|
public String getItemStackDisplayName(ItemStack stack){
|
||||||
String standardName = StringUtil.localize(this.getUnlocalizedName()+".name");
|
String standardName = StringUtil.localize(this.getUnlocalizedName()+".name");
|
||||||
|
@ -122,4 +115,64 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean update(ItemStack stack, TileEntity tile, int elapsedTicks){
|
||||||
|
boolean advanced = ((ItemPotionRing)stack.getItem()).isAdvanced;
|
||||||
|
int range = advanced ? 96 : 16;
|
||||||
|
List<EntityLivingBase> entities = tile.getWorld().getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(tile.getPos().getX()-range, tile.getPos().getY()-range, tile.getPos().getZ()-range, tile.getPos().getX()+range, tile.getPos().getY()+range, tile.getPos().getZ()+range));
|
||||||
|
if(entities != null && !entities.isEmpty()){
|
||||||
|
if(advanced){
|
||||||
|
//Give all entities the effect
|
||||||
|
for(EntityLivingBase entity : entities){
|
||||||
|
this.effectEntity(entity, stack, true);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Potion potion = Potion.getPotionById(ThePotionRings.values()[stack.getItemDamage()].effectID);
|
||||||
|
for(EntityLivingBase entity : entities){
|
||||||
|
if(entity.isPotionActive(potion)){
|
||||||
|
//Sometimes make the effect switch to someone else
|
||||||
|
if(Util.RANDOM.nextInt(100) <= 0){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//Continue giving the entity that already has the potion effect the effect
|
||||||
|
//Otherwise, it will randomly switch around to other entities
|
||||||
|
this.effectEntity(entity, stack, true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Give the effect to someone new if no one had it or it randomly switched
|
||||||
|
Collections.shuffle(entities);
|
||||||
|
this.effectEntity(entities.get(0), stack, true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getUsePerTick(ItemStack stack, TileEntity tile, int elapsedTicks){
|
||||||
|
return 325;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void effectEntity(EntityLivingBase thePlayer, ItemStack stack, boolean canUseBasic){
|
||||||
|
ThePotionRings effect = ThePotionRings.values()[stack.getItemDamage()];
|
||||||
|
Potion potion = Potion.getPotionById(effect.effectID);
|
||||||
|
PotionEffect activeEffect = thePlayer.getActivePotionEffect(potion);
|
||||||
|
if(!effect.needsWaitBeforeActivating || (activeEffect == null || activeEffect.getDuration() <= 1)){
|
||||||
|
if(!((ItemPotionRing)stack.getItem()).isAdvanced){
|
||||||
|
if(canUseBasic){
|
||||||
|
thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.normalAmplifier, true, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.advancedAmplifier, true, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.api.booklet.BookletPage;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter;
|
||||||
import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry;
|
import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry;
|
||||||
import de.ellpeck.actuallyadditions.mod.blocks.render.RenderCompost;
|
import de.ellpeck.actuallyadditions.mod.blocks.render.RenderCompost;
|
||||||
|
import de.ellpeck.actuallyadditions.mod.blocks.render.RenderDisplayStand;
|
||||||
import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens;
|
import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens;
|
||||||
import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud;
|
import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud;
|
||||||
import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues;
|
import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues;
|
||||||
|
@ -25,6 +26,7 @@ import de.ellpeck.actuallyadditions.mod.fluids.InitFluids;
|
||||||
import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit;
|
import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit;
|
||||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor;
|
import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor;
|
||||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost;
|
import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost;
|
||||||
|
import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand;
|
||||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud;
|
import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper;
|
import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem;
|
import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem;
|
||||||
|
@ -162,6 +164,7 @@ public class ClientProxy implements IProxy{
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCompost.class, new RenderCompost());
|
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCompost.class, new RenderCompost());
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens());
|
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens());
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud());
|
ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud());
|
||||||
|
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDisplayStand.class, new RenderDisplayStand());
|
||||||
|
|
||||||
//VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID, "textures/entity/villager/jamVillager.png"));
|
//VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID, "textures/entity/villager/jamVillager.png"));
|
||||||
|
|
||||||
|
|
|
@ -91,6 +91,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{
|
||||||
GameRegistry.registerTileEntity(TileEntityLaserRelayItemWhitelist.class, ModUtil.MOD_ID+":tileEntityLaserRelayItemWhitelist");
|
GameRegistry.registerTileEntity(TileEntityLaserRelayItemWhitelist.class, ModUtil.MOD_ID+":tileEntityLaserRelayItemWhitelist");
|
||||||
GameRegistry.registerTileEntity(TileEntityItemViewer.class, ModUtil.MOD_ID+":tileItemViewer");
|
GameRegistry.registerTileEntity(TileEntityItemViewer.class, ModUtil.MOD_ID+":tileItemViewer");
|
||||||
GameRegistry.registerTileEntity(TileEntityBookletStand.class, ModUtil.MOD_ID+":tileEntityBookletStand");
|
GameRegistry.registerTileEntity(TileEntityBookletStand.class, ModUtil.MOD_ID+":tileEntityBookletStand");
|
||||||
|
GameRegistry.registerTileEntity(TileEntityDisplayStand.class, ModUtil.MOD_ID+":tileEntityDisplayStand");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,140 @@
|
||||||
|
/*
|
||||||
|
* This file ("TileEntityDisplayStand.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 cofh.api.energy.EnergyStorage;
|
||||||
|
import cofh.api.energy.IEnergyReceiver;
|
||||||
|
import de.ellpeck.actuallyadditions.api.misc.IDisplayStandItem;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemBlock;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
|
|
||||||
|
public class TileEntityDisplayStand extends TileEntityInventoryBase implements IEnergyDisplay, IEnergyReceiver{
|
||||||
|
|
||||||
|
private EnergyStorage storage = new EnergyStorage(300000);
|
||||||
|
private int oldEnergy;
|
||||||
|
|
||||||
|
public TileEntityDisplayStand(){
|
||||||
|
super(1, "displayStand");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateEntity(){
|
||||||
|
super.updateEntity();
|
||||||
|
|
||||||
|
if(!this.worldObj.isRemote){
|
||||||
|
if(this.slots[0] != null && !this.isRedstonePowered){
|
||||||
|
IDisplayStandItem item = this.convertToDisplayStandItem(this.slots[0].getItem());
|
||||||
|
if(item != null){
|
||||||
|
int energy = item.getUsePerTick(this.slots[0], this, this.ticksElapsed);
|
||||||
|
if(this.storage.getEnergyStored() >= energy){
|
||||||
|
if(item.update(this.slots[0], this, this.ticksElapsed)){
|
||||||
|
this.storage.extractEnergy(energy, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){
|
||||||
|
this.oldEnergy = this.storage.getEnergyStored();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldSyncSlots(){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void markDirty(){
|
||||||
|
super.markDirty();
|
||||||
|
this.sendUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isItemValidForSlot(int index, ItemStack stack){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction){
|
||||||
|
return this.isItemValidForSlot(index, stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){
|
||||||
|
super.writeSyncableNBT(compound, isForSync);
|
||||||
|
this.storage.writeToNBT(compound);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){
|
||||||
|
super.readSyncableNBT(compound, isForSync);
|
||||||
|
this.storage.readFromNBT(compound);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IDisplayStandItem convertToDisplayStandItem(Item item){
|
||||||
|
if(item instanceof IDisplayStandItem){
|
||||||
|
return (IDisplayStandItem)item;
|
||||||
|
}
|
||||||
|
else if(item instanceof ItemBlock){
|
||||||
|
Block block = Block.getBlockFromItem(item);
|
||||||
|
if(block instanceof IDisplayStandItem){
|
||||||
|
return (IDisplayStandItem)block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getEnergy(){
|
||||||
|
return this.storage.getEnergyStored();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxEnergy(){
|
||||||
|
return this.storage.getMaxEnergyStored();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){
|
||||||
|
return from != EnumFacing.UP ? this.storage.receiveEnergy(maxReceive, simulate) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getEnergyStored(EnumFacing from){
|
||||||
|
return from != EnumFacing.UP ? this.storage.getEnergyStored() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxEnergyStored(EnumFacing from){
|
||||||
|
return from != EnumFacing.UP ? this.storage.getMaxEnergyStored() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canConnectEnergy(EnumFacing from){
|
||||||
|
return from != EnumFacing.UP;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getInventoryStackLimit(){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
|
@ -127,11 +127,6 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isItemValidForSlot(int index, ItemStack stack){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getField(int id){
|
public int getField(int id){
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"forge_marker": 1,
|
||||||
|
"defaults": {
|
||||||
|
"model": "minecraft:half_slab",
|
||||||
|
"textures": {
|
||||||
|
"bottom": "actuallyadditions:blocks/blockDisplayStand",
|
||||||
|
"top": "#bottom",
|
||||||
|
"side": "actuallyadditions:blocks/blockDisplayStandSide"
|
||||||
|
},
|
||||||
|
"transform": "forge:default-block"
|
||||||
|
},
|
||||||
|
"variants": {
|
||||||
|
"normal": [{}],
|
||||||
|
"inventory": [{}]
|
||||||
|
}
|
||||||
|
}
|
|
@ -209,6 +209,7 @@ tile.actuallyadditions.blockLaserRelayItemWhitelist.name=Advanced Item Laser Rel
|
||||||
tile.actuallyadditions.blockItemViewer.name=Item Interface
|
tile.actuallyadditions.blockItemViewer.name=Item Interface
|
||||||
tile.actuallyadditions.blockImpureIron.name=Impure Iron
|
tile.actuallyadditions.blockImpureIron.name=Impure Iron
|
||||||
tile.actuallyadditions.blockBookletStand.name=Wall-Mount Manual
|
tile.actuallyadditions.blockBookletStand.name=Wall-Mount Manual
|
||||||
|
tile.actuallyadditions.blockDisplayStand.name=Display Stand
|
||||||
|
|
||||||
#ESD
|
#ESD
|
||||||
tile.actuallyadditions.blockInputter.name=ESD
|
tile.actuallyadditions.blockInputter.name=ESD
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 486 B |
Binary file not shown.
After Width: | Height: | Size: 388 B |
Loading…
Reference in a new issue