auracore/src/main/java/dev/tilera/auracore/mixins/MixinTileNode.java

66 lines
2.1 KiB
Java

package dev.tilera.auracore.mixins;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import dev.tilera.auracore.api.EnumNodeType;
import dev.tilera.auracore.aura.AuraManager;
import net.minecraft.nbt.NBTTagCompound;
import thaumcraft.api.TileThaumcraft;
import thaumcraft.api.aspects.AspectList;
import thaumcraft.api.nodes.NodeType;
import thaumcraft.common.tiles.TileNode;
@Mixin(TileNode.class)
public abstract class MixinTileNode extends TileThaumcraft {
@Shadow(remap = false)
private NodeType nodeType;
@Shadow(remap = false)
AspectList aspectsBase;
int virtualNodeID = -1;
@Inject(method = "writeCustomNBT", at = @At("HEAD"), remap = false)
public void onNBTWrite(NBTTagCompound nbt, CallbackInfo ci) {
nbt.setInteger("virtualNodeID", this.virtualNodeID);
}
@Inject(method = "readCustomNBT", at = @At("HEAD"), remap = false)
public void onNBTRead(NBTTagCompound nbt, CallbackInfo ci) {
if (nbt.hasKey("virtualNodeID")) {
this.virtualNodeID = nbt.getInteger("virtualNodeID");
}
}
@Inject(method = "updateEntity", at = @At("HEAD"))
public void onTick(CallbackInfo ci) {
if (virtualNodeID == -1) {
this.createVirtualNode();
}
}
private void createVirtualNode() {
EnumNodeType type = convertNodeType(nodeType);
virtualNodeID = AuraManager.registerAuraNode(this.worldObj, (short)aspectsBase.visSize(), type, this.worldObj.provider.dimensionId, this.xCoord, this.yCoord, this.zCoord, true);
}
private static EnumNodeType convertNodeType(NodeType type) {
switch (type) {
case TAINTED:
case DARK:
return EnumNodeType.DARK;
case PURE:
return EnumNodeType.PURE;
case HUNGRY:
case UNSTABLE:
return EnumNodeType.UNSTABLE;
default:
return EnumNodeType.NORMAL;
}
}
}