redpower/src/main/java/com/eloraam/redpower/machine/TileMachinePanel.java
LordMZTE 3d9ef7a3a1
fix: accelerator
- added powered state and pipe connections to datapacket
- fixed nonsensical partial `writeToNBT` (WTF)

closes #10
2023-01-14 00:12:18 +01:00

199 lines
5.6 KiB
Java

package com.eloraam.redpower.machine;
import java.util.List;
import com.eloraam.redpower.RedPowerMachine;
import com.eloraam.redpower.core.BlockMultipart;
import com.eloraam.redpower.core.IFrameSupport;
import com.eloraam.redpower.core.IRotatable;
import com.eloraam.redpower.core.RedPowerLib;
import com.eloraam.redpower.core.TileMultipart;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.EnumSkyBlock;
import net.minecraft.world.IBlockAccess;
public class TileMachinePanel extends TileMultipart implements IRotatable, IFrameSupport {
public int Rotation = 0;
public boolean Active = false;
public boolean powered = false;
public boolean Delay = false;
public boolean Charged = false;
public int getLightValue() {
return 0;
}
void updateLight() {
super.worldObj.updateLightByType(
EnumSkyBlock.Block, super.xCoord, super.yCoord, super.zCoord
);
}
public int getFacing(EntityLivingBase ent) {
int yawrx
= (int) Math.floor((double) (ent.rotationYaw * 4.0F / 360.0F) + 0.5) & 3;
if (Math.abs(ent.posX - (double) super.xCoord) < 2.0
&& Math.abs(ent.posZ - (double) super.zCoord) < 2.0) {
double p = ent.posY + 1.82 - (double) ent.yOffset - (double) super.yCoord;
if (p > 2.0) {
return 0;
}
if (p < 0.0) {
return 1;
}
}
switch (yawrx) {
case 0:
return 3;
case 1:
return 4;
case 2:
return 2;
default:
return 5;
}
}
@Override
public void onBlockPlaced(ItemStack ist, int side, EntityLivingBase ent) {
this.Rotation
= (int) Math.floor((double) (ent.rotationYaw * 4.0F / 360.0F) + 0.5) & 3;
RedPowerLib.updateIndirectNeighbors(
super.worldObj, super.xCoord, super.yCoord, super.zCoord, super.blockType
);
if (ent instanceof EntityPlayer) {
super.Owner = ((EntityPlayer) ent).getGameProfile();
}
}
public Block getBlockType() {
return RedPowerMachine.blockMachinePanel;
}
@Override
public void addHarvestContents(List<ItemStack> ist) {
ist.add(new ItemStack(this.getBlockType(), 1, this.getExtendedID()));
}
@Override
public void onHarvestPart(EntityPlayer player, int part, boolean willHarvest) {
this.breakBlock(willHarvest);
}
@Override
public float getPartStrength(EntityPlayer player, int part) {
BlockMachinePanel bl = RedPowerMachine.blockMachinePanel;
return player.getBreakSpeed(bl, false, 0) / (bl.getHardness() * 30.0F);
}
@Override
public boolean blockEmpty() {
return false;
}
@Override
public void setPartBounds(BlockMultipart block, int part) {
block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
}
@Override
public int getSolidPartsMask() {
return 1;
}
@Override
public int getPartsMask() {
return 1;
}
@Override
public int getPartMaxRotation(int part, boolean sec) {
return sec ? 0 : 3;
}
@Override
public int getPartRotation(int part, boolean sec) {
return sec ? 0 : this.Rotation;
}
@Override
public void setPartRotation(int part, boolean sec, int rot) {
if (!sec) {
this.Rotation = rot;
this.updateBlockChange();
}
}
@Override
public void writeFramePacket(NBTTagCompound tag) {
tag.setByte("rot", (byte) this.Rotation);
int ps = (this.Active ? 1 : 0) | (this.powered ? 2 : 0) | (this.Delay ? 4 : 0)
| (this.Charged ? 8 : 0);
tag.setByte("ps", (byte) ps);
}
@Override
public void readFramePacket(NBTTagCompound tag) {
this.Rotation = tag.getByte("rot");
int ps = tag.getByte("ps");
this.Active = (ps & 1) > 0;
this.powered = (ps & 2) > 0;
this.Delay = (ps & 4) > 0;
this.Charged = (ps & 8) > 0;
}
@Override
public void onFrameRefresh(IBlockAccess iba) {}
@Override
public void onFramePickup(IBlockAccess iba) {}
@Override
public void onFrameDrop() {}
@Override
public void readFromNBT(NBTTagCompound data) {
super.readFromNBT(data);
byte k = data.getByte("ps");
this.Rotation = data.getByte("rot");
this.Active = (k & 1) > 0;
this.powered = (k & 2) > 0;
this.Delay = (k & 4) > 0;
this.Charged = (k & 8) > 0;
}
@Override
public void writeToNBT(NBTTagCompound data) {
super.writeToNBT(data);
int ps = (this.Active ? 1 : 0) | (this.powered ? 2 : 0) | (this.Delay ? 4 : 0)
| (this.Charged ? 8 : 0);
data.setByte("ps", (byte) ps);
data.setByte("rot", (byte) this.Rotation);
}
@Override
protected void readFromPacket(NBTTagCompound data) {
this.Rotation = data.getByte("rot");
int ps = data.getByte("ps");
this.Active = (ps & 1) > 0;
this.powered = (ps & 2) > 0;
this.Delay = (ps & 4) > 0;
this.Charged = (ps & 8) > 0;
this.updateLight();
}
@Override
protected void writeToPacket(NBTTagCompound data) {
data.setByte("rot", (byte) this.Rotation);
int ps = (this.Active ? 1 : 0) | (this.powered ? 2 : 0) | (this.Delay ? 4 : 0)
| (this.Charged ? 8 : 0);
data.setByte("ps", (byte) ps);
}
}