mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
134 lines
3.4 KiB
Java
134 lines
3.4 KiB
Java
package com.hbm.tileentity.machine;
|
|
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.items.tool.ItemKey;
|
|
import com.hbm.main.MainRegistry;
|
|
import com.hbm.tileentity.TileEntityLoadedBase;
|
|
import com.hbm.util.ArmorUtil;
|
|
|
|
import io.netty.buffer.ByteBuf;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
public abstract class TileEntityLockableBase extends TileEntityLoadedBase {
|
|
|
|
protected int lock;
|
|
private boolean isLocked = false;
|
|
protected double lockMod = 0.1D;
|
|
|
|
public boolean isLocked() {
|
|
return isLocked;
|
|
}
|
|
|
|
public void lock() {
|
|
if(lock == 0) {
|
|
MainRegistry.logger.error("A block has been set to locked state before setting pins, this should not happen and may cause errors! " + this.toString());
|
|
}
|
|
isLocked = true;
|
|
markDirty();
|
|
}
|
|
|
|
public void setPins(int pins) { lock = pins; markDirty(); }
|
|
public int getPins() { return lock; }
|
|
public void setMod(double mod) { lockMod = mod; markDirty(); }
|
|
public double getMod() { return lockMod; }
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound nbt) {
|
|
super.readFromNBT(nbt);
|
|
|
|
lock = nbt.getInteger("lock");
|
|
isLocked = nbt.getBoolean("isLocked");
|
|
lockMod = nbt.getDouble("lockMod");
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound nbt) {
|
|
super.writeToNBT(nbt);
|
|
|
|
nbt.setInteger("lock", lock);
|
|
nbt.setBoolean("isLocked", isLocked);
|
|
nbt.setDouble("lockMod", lockMod);
|
|
}
|
|
|
|
@Override
|
|
public void serialize(ByteBuf buf) {
|
|
super.serialize(buf);
|
|
|
|
buf.writeInt(lock);
|
|
buf.writeBoolean(isLocked);
|
|
buf.writeDouble(lockMod);
|
|
}
|
|
|
|
@Override
|
|
public void deserialize(ByteBuf buf) {
|
|
super.deserialize(buf);
|
|
|
|
lock = buf.readInt();
|
|
isLocked = buf.readBoolean();
|
|
lockMod = buf.readDouble();
|
|
}
|
|
|
|
public boolean canAccess(EntityPlayer player) {
|
|
|
|
if(!isLocked) {
|
|
return true;
|
|
} else {
|
|
if(player == null)
|
|
return false;
|
|
ItemStack stack = player.getHeldItem();
|
|
|
|
if(stack != null && stack.getItem() instanceof ItemKey && ItemKey.getPins(stack) == this.lock) {
|
|
worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F);
|
|
return true;
|
|
}
|
|
|
|
if(stack != null && stack.getItem() == ModItems.key_red) {
|
|
worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F);
|
|
return true;
|
|
}
|
|
|
|
return tryPick(player);
|
|
}
|
|
}
|
|
|
|
private boolean tryPick(EntityPlayer player) {
|
|
|
|
boolean canPick = false;
|
|
ItemStack stack = player.getHeldItem();
|
|
double chanceOfSuccess = this.lockMod * 100;
|
|
|
|
if(stack != null && stack.getItem() == ModItems.pin && (player.inventory.hasItem(ModItems.screwdriver) || player.inventory.hasItem(ModItems.screwdriver_desh))) {
|
|
|
|
stack.stackSize--;
|
|
canPick = true;
|
|
}
|
|
|
|
if(stack != null && (stack.getItem() == ModItems.screwdriver || stack.getItem() == ModItems.screwdriver_desh) && player.inventory.hasItem(ModItems.pin)) {
|
|
|
|
player.inventory.consumeInventoryItem(ModItems.pin);
|
|
player.inventoryContainer.detectAndSendChanges();
|
|
canPick = true;
|
|
}
|
|
|
|
if(canPick) {
|
|
|
|
if(ArmorUtil.checkArmorPiece(player, ModItems.jackt, 2) || ArmorUtil.checkArmorPiece(player, ModItems.jackt2, 2))
|
|
chanceOfSuccess *= 100D;
|
|
|
|
double rand = player.worldObj.rand.nextDouble() * 100;
|
|
|
|
if(chanceOfSuccess > rand) {
|
|
worldObj.playSoundAtEntity(player, "hbm:item.pinUnlock", 1.0F, 1.0F);
|
|
return true;
|
|
}
|
|
|
|
worldObj.playSoundAtEntity(player, "hbm:item.pinBreak", 1.0F, 0.8F + player.worldObj.rand.nextFloat() * 0.2F);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
}
|