v5.5.6 Beta #12
*Fixed up new upgrade behavior. *Added button to teleport Robit back home. *Robit now picks up items off the ground. *Fixed Robit's inventory shift-clicking. *Robit now stores his name in item form.
This commit is contained in:
parent
1f7dc818f7
commit
6d0a68e47e
10 changed files with 140 additions and 31 deletions
Binary file not shown.
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
@ -2,6 +2,7 @@ package mekanism.client;
|
|||
|
||||
import mekanism.common.ContainerRobitMain;
|
||||
import mekanism.common.EntityRobit;
|
||||
import mekanism.common.EnumPacketType;
|
||||
import mekanism.common.Mekanism;
|
||||
import mekanism.common.PacketHandler;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
|
@ -12,11 +13,10 @@ import net.minecraft.entity.player.InventoryPlayer;
|
|||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import universalelectricity.core.electricity.ElectricityDisplay;
|
||||
import universalelectricity.core.electricity.ElectricityDisplay.ElectricUnit;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class GuiRobitMain extends GuiContainer
|
||||
|
@ -127,6 +127,10 @@ public class GuiRobitMain extends GuiContainer
|
|||
{
|
||||
drawCreativeTabHoveringText("Rename this Robit", xAxis, yAxis);
|
||||
}
|
||||
else if(xAxis >= 6 && xAxis <= 24 && yAxis >= 16 && yAxis <= 34)
|
||||
{
|
||||
drawCreativeTabHoveringText("Teleport back home", xAxis, yAxis);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -197,6 +201,14 @@ public class GuiRobitMain extends GuiContainer
|
|||
drawTexturedModalRect(guiWidth + 6, guiHeight + 53, 176 + 25, 234, 18, 18);
|
||||
}
|
||||
|
||||
if(xAxis >= 6 && xAxis <= 24 && yAxis >= 16 && yAxis <= 34)
|
||||
{
|
||||
drawTexturedModalRect(guiWidth + 6, guiHeight + 16, 176 + 25 + 18, 36, 18, 18);
|
||||
}
|
||||
else {
|
||||
drawTexturedModalRect(guiWidth + 6, guiHeight + 16, 176 + 25 + 18, 54, 18, 18);
|
||||
}
|
||||
|
||||
int displayInt;
|
||||
|
||||
displayInt = getScaledEnergyLevel(120);
|
||||
|
@ -264,6 +276,11 @@ public class GuiRobitMain extends GuiContainer
|
|||
mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F);
|
||||
toggleNameChange();
|
||||
}
|
||||
else if(xAxis >= 6 && xAxis <= 24 && yAxis >= 16 && yAxis <= 34)
|
||||
{
|
||||
mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F);
|
||||
PacketHandler.sendPacketDataInt(EnumPacketType.GO_HOME, robit.entityId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,26 +60,17 @@ public class ContainerRobitInventory extends Container
|
|||
ItemStack slotStack = currentSlot.getStack();
|
||||
stack = slotStack.copy();
|
||||
|
||||
if(slotID >= 27 && slotID <= 53)
|
||||
if(slotID < 27)
|
||||
{
|
||||
if(!mergeItemStack(slotStack, 54, inventorySlots.size(), false))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else if(slotID > 53)
|
||||
{
|
||||
if(!mergeItemStack(slotStack, 27, 53, false))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(!mergeItemStack(slotStack, 27, inventorySlots.size(), true))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else if(!mergeItemStack(slotStack, 0, 27, false))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if(slotStack.stackSize == 0)
|
||||
{
|
||||
|
|
|
@ -5,6 +5,7 @@ import ic2.api.item.IElectricItem;
|
|||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.List;
|
||||
|
||||
import mekanism.api.EnergizedItemManager;
|
||||
import mekanism.api.IEnergizedItem;
|
||||
|
@ -118,6 +119,8 @@ public class EntityRobit extends EntityCreature implements IInventory, ISustaine
|
|||
|
||||
if(!worldObj.isRemote)
|
||||
{
|
||||
collectItems();
|
||||
|
||||
if(homeLocation == null)
|
||||
{
|
||||
setDead();
|
||||
|
@ -135,12 +138,7 @@ public class EntityRobit extends EntityCreature implements IInventory, ISustaine
|
|||
|
||||
if(getEnergy() == 0 && !isOnChargepad())
|
||||
{
|
||||
setFollowing(false);
|
||||
setPositionAndUpdate(homeLocation.xCoord+0.5, homeLocation.yCoord+0.3, homeLocation.zCoord+0.5);
|
||||
|
||||
motionX = 0;
|
||||
motionY = 0;
|
||||
motionZ = 0;
|
||||
goHome();
|
||||
}
|
||||
|
||||
if(inventory[27] != null && getEnergy() < MAX_ELECTRICITY)
|
||||
|
@ -227,6 +225,65 @@ public class EntityRobit extends EntityCreature implements IInventory, ISustaine
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void collectItems()
|
||||
{
|
||||
List<EntityItem> items = worldObj.getEntitiesWithinAABB(EntityItem.class, boundingBox.expand(1.5, 1.5, 1.5));
|
||||
|
||||
if(items != null && !items.isEmpty())
|
||||
{
|
||||
for(EntityItem item : items)
|
||||
{
|
||||
if(item.delayBeforeCanPickup > 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for(int i = 0; i < 27; i++)
|
||||
{
|
||||
ItemStack itemStack = inventory[i];
|
||||
|
||||
if(itemStack == null)
|
||||
{
|
||||
inventory[i] = item.getEntityItem();
|
||||
item.setPosition(posX, posY, posZ);
|
||||
item.setDead();
|
||||
playSound("random.pop", 0.2F, ((rand.nextFloat() - rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
|
||||
|
||||
break;
|
||||
}
|
||||
else if(itemStack.isItemEqual(item.getEntityItem()) && itemStack.stackSize < itemStack.getMaxStackSize())
|
||||
{
|
||||
int needed = itemStack.getMaxStackSize() - itemStack.stackSize;
|
||||
int toAdd = Math.min(needed, item.getEntityItem().stackSize);
|
||||
|
||||
itemStack.stackSize += toAdd;
|
||||
item.getEntityItem().stackSize -= toAdd;
|
||||
|
||||
if(item.getEntityItem().stackSize == 0)
|
||||
{
|
||||
item.setPosition(posX, posY, posZ);
|
||||
item.setDead();
|
||||
}
|
||||
|
||||
playSound("random.pop", 0.2F, ((rand.nextFloat() - rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void goHome()
|
||||
{
|
||||
setFollowing(false);
|
||||
setPositionAndUpdate(homeLocation.xCoord+0.5, homeLocation.yCoord+0.3, homeLocation.zCoord+0.5);
|
||||
|
||||
motionX = 0;
|
||||
motionY = 0;
|
||||
motionZ = 0;
|
||||
}
|
||||
|
||||
private boolean canSmelt()
|
||||
{
|
||||
|
@ -316,6 +373,7 @@ public class EntityRobit extends EntityCreature implements IInventory, ISustaine
|
|||
ItemRobit item = (ItemRobit)entityItem.getEntityItem().getItem();
|
||||
item.setEnergy(entityItem.getEntityItem(), getEnergy());
|
||||
item.setInventory(getInventory(), entityItem.getEntityItem());
|
||||
item.setName(entityItem.getEntityItem(), getName());
|
||||
|
||||
float k = 0.05F;
|
||||
entityItem.motionX = 0;
|
||||
|
|
|
@ -75,6 +75,9 @@ public enum EnumPacketType
|
|||
/** Used to send a Robit name update packet to the server. */
|
||||
NAME_UPDATE(21),
|
||||
|
||||
/** Used to send a Robit 'go home' packet to the server. */
|
||||
GO_HOME(22),
|
||||
|
||||
/** A custom packet type. Handled in PacketHandler. */
|
||||
CUSTOM(-1);
|
||||
|
||||
|
|
|
@ -36,8 +36,10 @@ public class ItemRobit extends ItemEnergized implements ISustainedInventory
|
|||
@SideOnly(Side.CLIENT)
|
||||
public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag)
|
||||
{
|
||||
list.add(EnumColor.INDIGO + "Name: " + EnumColor.GREY + (getName(itemstack).isEmpty() ? "Robit" : getName(itemstack)));
|
||||
|
||||
super.addInformation(itemstack, entityplayer, list, flag);
|
||||
|
||||
|
||||
list.add(EnumColor.AQUA + "Inventory: " + EnumColor.GREY + (getInventory(itemstack) != null && getInventory(itemstack).tagCount() != 0));
|
||||
}
|
||||
|
||||
|
@ -58,6 +60,7 @@ public class ItemRobit extends ItemEnergized implements ISustainedInventory
|
|||
robit.setEnergy(getEnergy(itemstack));
|
||||
robit.setOwner(entityplayer.username);
|
||||
robit.setInventory(getInventory(itemstack));
|
||||
robit.setName(getName(itemstack));
|
||||
|
||||
world.spawnEntityInWorld(robit);
|
||||
}
|
||||
|
@ -77,6 +80,27 @@ public class ItemRobit extends ItemEnergized implements ISustainedInventory
|
|||
return false;
|
||||
}
|
||||
|
||||
public void setName(ItemStack itemstack, String name)
|
||||
{
|
||||
if(itemstack.stackTagCompound == null)
|
||||
{
|
||||
itemstack.setTagCompound(new NBTTagCompound());
|
||||
}
|
||||
|
||||
itemstack.stackTagCompound.setString("name", name);
|
||||
}
|
||||
|
||||
public String getName(ItemStack itemstack)
|
||||
{
|
||||
if(itemstack.stackTagCompound == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String name = itemstack.stackTagCompound.getString("name");
|
||||
return name != null ? name : "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInventory(NBTTagList nbtTags, Object... data)
|
||||
{
|
||||
|
|
|
@ -517,7 +517,7 @@ public final class MekanismUtils
|
|||
}
|
||||
|
||||
/**
|
||||
* Gets the energy required per tick for a machine via it's upgrades.
|
||||
* Gets the energy required per tick for a machine via it's upgrades.
|
||||
* @param speedUpgrade - number of speed upgrades
|
||||
* @param energyUpgrade - number of energy upgrades
|
||||
* @param def - the original, default energy required
|
||||
|
@ -529,7 +529,7 @@ public final class MekanismUtils
|
|||
}
|
||||
|
||||
/**
|
||||
* Gets the energy required per tick for a machine via it's upgrades.
|
||||
* Gets the energy required per tick for a machine via it's upgrades.
|
||||
* @param speedUpgrade - number of speed upgrades
|
||||
* @param energyUpgrade - number of energy upgrades
|
||||
* @param def - the original, default energy required
|
||||
|
|
|
@ -533,6 +533,22 @@ public class PacketHandler implements IPacketHandler
|
|||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
else if(packetType == EnumPacketType.GO_HOME.id)
|
||||
{
|
||||
try {
|
||||
int id = dataStream.readInt();
|
||||
|
||||
EntityRobit robit = (EntityRobit)entityplayer.worldObj.getEntityByID(id);
|
||||
|
||||
if(robit != null)
|
||||
{
|
||||
robit.goHome();
|
||||
}
|
||||
} catch(Exception e) {
|
||||
System.err.println("[Mekanism] Error while handling go home packet.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} catch(Exception e) {
|
||||
System.err.println("[Mekanism] Error while handling packet.");
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -98,7 +98,7 @@ public class RobitAIFollow extends EntityAIBase
|
|||
@Override
|
||||
public void updateTask()
|
||||
{
|
||||
theRobit.getLookHelper().setLookPositionWithEntity(theOwner, 12.0F, theRobit.getVerticalFaceSpeed());
|
||||
theRobit.getLookHelper().setLookPositionWithEntity(theOwner, 6.0F, theRobit.getVerticalFaceSpeed());
|
||||
|
||||
if(theRobit.getFollowing())
|
||||
{
|
||||
|
|
|
@ -175,19 +175,19 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem
|
|||
}
|
||||
}
|
||||
|
||||
if(electricityStored >= ENERGY_PER_TICK)
|
||||
if(electricityStored >= MekanismUtils.getEnergyPerTick(speedMultiplier, energyMultiplier, ENERGY_PER_TICK))
|
||||
{
|
||||
if(canOperate() && (operatingTicks+1) < MekanismUtils.getTicks(speedMultiplier, TICKS_REQUIRED))
|
||||
{
|
||||
operatingTicks++;
|
||||
electricityStored -= ENERGY_PER_TICK;
|
||||
electricityStored -= MekanismUtils.getEnergyPerTick(speedMultiplier, energyMultiplier, ENERGY_PER_TICK);
|
||||
}
|
||||
else if(canOperate() && (operatingTicks+1) >= MekanismUtils.getTicks(speedMultiplier, TICKS_REQUIRED))
|
||||
{
|
||||
operate();
|
||||
|
||||
operatingTicks = 0;
|
||||
electricityStored -= ENERGY_PER_TICK;
|
||||
electricityStored -= MekanismUtils.getEnergyPerTick(speedMultiplier, energyMultiplier, ENERGY_PER_TICK);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -202,7 +202,7 @@ public class TileEntityMetallurgicInfuser extends TileEntityElectricBlock implem
|
|||
type = InfusionType.NONE;
|
||||
}
|
||||
|
||||
if(canOperate() && electricityStored >= ENERGY_PER_TICK)
|
||||
if(canOperate() && electricityStored >= MekanismUtils.getEnergyPerTick(speedMultiplier, energyMultiplier, ENERGY_PER_TICK))
|
||||
{
|
||||
setActive(true);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue