Hbm-s-Nuclear-Tech-GIT/src/main/java/com/hbm/entity/train/EntityRailCarElectric.java
2024-04-09 16:55:53 +02:00

71 lines
1.9 KiB
Java

package com.hbm.entity.train;
import com.hbm.items.ModItems;
import api.hbm.energymk2.IBatteryItem;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public abstract class EntityRailCarElectric extends EntityRailCarRidable {
public EntityRailCarElectric(World world) {
super(world);
}
public abstract int getMaxPower();
public abstract int getPowerConsumption();
public boolean hasChargeSlot() { return false; }
public int getChargeSlot() { return 0; }
@Override protected void entityInit() {
super.entityInit();
this.dataWatcher.addObject(3, new Integer(0));
}
@Override public boolean canAccelerate() {
return true;
//return this.getPower() >= this.getPowerConsumption();
}
@Override public void consumeFuel() {
//this.setPower(this.getPower() - this.getPowerConsumption());
}
public void setPower(int power) {
this.dataWatcher.updateObject(3, power);
}
public int getPower() {
return this.dataWatcher.getWatchableObjectInt(3);
}
@Override
public void onUpdate() {
super.onUpdate();
if(!worldObj.isRemote) {
if(this.hasChargeSlot()) {
ItemStack stack = this.getStackInSlot(this.getChargeSlot());
if(stack != null && stack.getItem() instanceof IBatteryItem) {
IBatteryItem battery = (IBatteryItem) stack.getItem();
int powerNeeded = this.getMaxPower() - this.getPower();
long powerProvided = Math.min(battery.getDischargeRate(), battery.getCharge(stack));
int powerTransfered = (int) Math.min(powerNeeded, powerProvided);
if(powerTransfered > 0) {
battery.dischargeBattery(stack, powerTransfered);
this.setPower(this.getPower() + powerTransfered);
}
} else if(stack != null) {
if(stack.getItem() == ModItems.battery_creative || stack.getItem() == ModItems.fusion_core_infinite) {
this.setPower(this.getMaxPower());
}
}
}
}
}
}