Jump to content

Recommended Posts

Posted

I'm currently working on a power system for a friend's mod, however I'm hitting a bit of a snag.

So far the cables only seem to be connecting successfully in the vertical (y) direction and transferring MF power packets accordingly.

 

Visually, connections will only show up once the chunk has been reloaded so I'm guessing I'm failing with the update packet somewhere.

 

Does anyone have any idea what I'm doing wrong here?

 

package net.RPower.RPowermod.machines.power.cable;

import RPower.api.power.E_MFPacketType;
import RPower.api.power.MFPacket;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.RPower.RPowermod.machines.power.MFHelper;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class BlockFluxCableBasic extends BlockContainer{

public BlockFluxCableBasic(Material p_i45394_1_) {
	super(p_i45394_1_);

}

@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int metaD,  float hitX, float hitY, float hitZ)
{
	MFPacket temp = new MFPacket(E_MFPacketType.REQUEST);
	((TileEntityFluxCable)world.getTileEntity(x, y, z)).takePacket(temp);

	return false;
}

@Override
public void onNeighborBlockChange(World world, int x,int y, int z, Block block) {
	if((world.getBlock(x, y, z).hasTileEntity(0) && MFHelper.checkConnectable(world.getTileEntity(x, y, z))))
	{
		((TileEntityFluxCable)world.getTileEntity(x, y, z)).checkConnections();
	}
}

@Override
public int onBlockPlaced(World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metaD)
{
	if((world.getBlock(x, y, z).hasTileEntity(0) && MFHelper.checkConnectable(world.getTileEntity(x, y, z))))
		((TileEntityFluxCable)world.getTileEntity(x, y, z)).connections[(5-side)]=true;
	System.out.println("set block at ["+x+","+y+","+z+"] to: "+side);

	return super.onBlockPlaced(world, x, y, z,side, hitX, hitY, hitZ, metaD);
}

@Override
public TileEntity createNewTileEntity(World world, int metadata) {
	TileEntity cable = new TileEntityFluxCable(32);
	return cable;
}

@Override
public boolean isAir(IBlockAccess world, int x, int y, int z) {
	return false;
}

@Override
protected boolean canSilkHarvest() {
	return false;
};

@Override
public boolean canSilkHarvest(World world, EntityPlayer player, int x, int y, int z, int metadata) {
	return false;
};

@Override
public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) {
	return false;
}

@SideOnly(Side.CLIENT)
@Override
public boolean renderAsNormalBlock()
{
	return false;
}

@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockAccess blockAccess, int x, int y, int z, int side) {
	return false;
};

@SideOnly(Side.CLIENT)
@Override
public boolean isOpaqueCube()
{
	return false;
}

@Override
public int getRenderType() {
	return -1;
}



}

this is the basic block class, the right-click spawned packet is purely for testing connections.

 

 

package net.RPower.RPowermod.machines.power.cable;

import java.util.LinkedList;
import java.util.Queue;
import RPower.api.power.E_MFPacketType;
import RPower.api.power.I_MFSink;
import RPower.api.power.MFPacket;
import RPower.api.power.cable.I_MFCable;
import net.RPower.RPowermod.machines.power.MFHelper;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;

public class TileEntityFluxCable extends TileEntity implements I_MFCable {
//Connections are an array of [up, Down, North, East, West, South]
public boolean[] connections = {false, false, false, false, false, false};

//whether or not the cable is lossy
public boolean insulatedCable;

//maximum limit the cable can carry
public double packetSizeLimit;

//Packets awaiting processing
public Queue<MFPacket> internalBuffer;

//automatically calculated.
public double percentageLoss;

//transfer mode, unbridged connections can only cross an intersection in straight lines (may be reserved for advanced cabling)
public boolean bridgeConnections;

public TileEntityFluxCable()
{
	this(32);
}

public TileEntityFluxCable(double packetSize)
{
	this(packetSize,false);
}

public TileEntityFluxCable(double packetSize, boolean insulated)
{
	this(packetSize,insulated,true);
}
public TileEntityFluxCable(double packetSize, boolean insulated,boolean bridged)
{
	packetSizeLimit= packetSize;
	insulatedCable=insulated;
	bridgeConnections=bridged;
	internalBuffer=new LinkedList<MFPacket>();
	checkLoss(insulated);
}

private void checkLoss(boolean insulated) {
	if(!insulated)
	{
		percentageLoss=(packetSizeLimit/MFPacket.POWERLIMIT);
	}
}

@Override
public boolean takePacket(MFPacket packet)
{
	double excess=0;
	if(!insulatedCable)
	{

		excess+=(percentageLoss*packet.getBuffer());
		packet.setBuffer(packet.getBuffer()-excess);
	}
	if(packet.getBuffer()>packetSizeLimit)
	{
		excess += packet.getBuffer()-packetSizeLimit;
		packet.setBuffer(packetSizeLimit);
	}
	powerBleed(excess);

	boolean result=false;
	result=internalBuffer.add(packet);
	return result;
}

@Override
public void writeToNBT(NBTTagCompound nbtTag) {
	int[] connectionsInt = new int[6];
	int i = 0;
	for (boolean side : connections) {
		connectionsInt[i]=connections[i]?1:0;
		i++;
	}
	nbtTag.setIntArray("connections", connectionsInt);
	nbtTag.setBoolean("insulated", insulatedCable);
	nbtTag.setBoolean("bridged", bridgeConnections);

	nbtTag.setDouble("packetLimit", packetSizeLimit);

	super.writeToNBT(nbtTag);
};

@Override
public void readFromNBT(NBTTagCompound nbtTag) {
	int[] connectionsInt = nbtTag.getIntArray("connections");
	int i = 0;
	for (boolean side : connections) {
		connections[i]=(connectionsInt[i]==1);
		i++;
	}

	insulatedCable=nbtTag.getBoolean("insulated");

	bridgeConnections=nbtTag.getBoolean("bridged");

	packetSizeLimit=nbtTag.getDouble("packetLimit");

	checkLoss(insulatedCable);

	super.readFromNBT(nbtTag);
};

@Override
public Packet getDescriptionPacket() {
	NBTTagCompound nbtTag = new NBTTagCompound();
	this.writeToNBT(nbtTag);
	//TODO: Get this damn working!
	return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbtTag);
}

@Override
public void onDataPacket(NetworkManager networkManager, S35PacketUpdateTileEntity packet) {
	readFromNBT(packet.func_148857_g());
}

@Override
public void updateEntity() {
	if(!internalBuffer.isEmpty())
	{
		MFPacket packet = internalBuffer.remove();
		boolean result=false;
		byte  direction;
		for(int i=0; i<59;i++)
		{
			int posNeg = ((int)(Math.random()*%2==0)?1:-1;
			double randXvel=Math.random()*(2*posNeg);
			double randYvel=Math.random()*(2*posNeg);
			double randZvel=Math.random()*(2*posNeg);
			this.worldObj.spawnParticle("magicCrit", xCoord, yCoord, zCoord, randXvel, randYvel, randZvel);
		}

		switch(packet.getType())
		{
		case RESPOND:
			direction = packet.getOrigin().peek();
			result = (direction!=-1);
			result = pushPacket(packet);
			break;
		default:
			direction = packet.getOrigin().peek();
			packet.getOrigin().add(randDir(direction));
			result=pushPacket(packet);
			break;
		}
	}
	super.updateEntity();
}

private byte randDir(byte initDirection) {
	byte result = -1;
	while((connectionNum()>=2)&&(result==-1||!connections[result])&&result!=initDirection)
	{
		result=(byte)(Math.random()*5);
	}
	return result;
}

public byte connectionNum() {
	byte result=0;
	for (Boolean connection : connections) {
		if(connection)
			result++;
	}
	return result;
}


public boolean checkConnections()
{
	boolean result=false;

	int xDir=0, yDir=0, zDir=0;
	for(int dir=0; dir<=5; dir++)
	{
		int modifier=(dir%2==1)?1:-1;
		System.err.println("test vars: dir="+dir+", TestCase="+(dir/2)+", modifier="+modifier+",");
		switch(dir/2)
		{
		case 2:
			xDir=modifier;
			break;
		case 1:
			zDir=modifier;
			break;
		case 0:
			yDir=modifier;
			break;
		}
		System.out.println("testing ["+xDir+","+yDir+","+zDir+"]");
		result = this.worldObj.getBlock(xCoord+xDir, yCoord+yDir, zCoord+zDir).hasTileEntity(0);
		if(result)
			result = MFHelper.checkConnectable(this.worldObj.getTileEntity(xCoord+xDir, yCoord+yDir, zCoord+zDir));	

		System.out.println("result of MF test was: "+result);

		int conDir = dir-modifier;
		System.err.println("conDir="+conDir);
		connections[conDir]=result;

		if(connections[conDir])
		{
			System.out.println("Connection found!");
		}


	}

	return result;
}

@Override
public boolean pushPacket(MFPacket packet)
{

	byte direction = packet.getOrigin().peek();
	if(packet.getType()==E_MFPacketType.RESPOND)
		packet.getOrigin().pop();

	boolean result= false;
	int xDir=0, yDir=0, zDir=0;
	int modifier=(direction%2==1)?-1:1;
	//up:1, down:0, x+:5, x-:4, z+:3,z-2;
	switch(direction/2)
	{
	case 2:
		xDir=modifier;
		break;
	case 1:
		zDir=modifier;
		break;
	case 0:
		yDir=modifier;
		break;
	}
	result = this.worldObj.getBlock(xCoord+xDir, yCoord+yDir, zCoord+zDir).hasTileEntity(0);
	if(result)
		result=this.worldObj.getTileEntity(xCoord+xDir, yCoord+yDir, zCoord+zDir)instanceof I_MFSink;
	if(result)
		result=((I_MFSink)this.worldObj.getTileEntity(xCoord+xDir, yCoord+yDir, zCoord+zDir)).takePacket(packet);
	if(!result)
		powerBleed(packet.getBuffer());
	return result;
}

@Override
public boolean canUpdate()
{
	return true;
}

@Override
public double flowLimit() {
	return packetSizeLimit;
}

@Override
public void powerBleed(double excess) {
	//add power bleed to chunk atmosphere -> own effects + taint if Thaumcraft installed
	if(excess>0)
		System.err.println(""+excess+" MF bled off into atmosphere!\n");

}

@Override
public double getPacketLimit() {
	return packetSizeLimit;
}

@Override
public boolean isInsulated() {
	return insulatedCable;
}

@Override
public boolean isBridged() {
	return bridgeConnections;
}

@Override
public boolean canDeBridge() {
	return insulatedCable;
}

@Override
public boolean[] getConnections() {
	return connections;
}

}

The Actual TileEntity and source of the stress here, it's meant to keep an array of connected sides and update it when neighbours change.

 

package net.RPower.RPowermod.machines.power;

import RPower.api.power.I_MFSink;
import RPower.api.power.I_MFSource;
import RPower.api.power.cable.I_MFCable;
import net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable;
import net.minecraft.tileentity.TileEntity;

public class MFHelper {


public static boolean checkConnectable(TileEntity tileEntity) {
	boolean result = (tileEntity instanceof I_MFSink || tileEntity instanceof I_MFSource);
	if (result)
		System.out.println("Success!");
	System.out.println(tileEntity.toString());
	return result;
}

}

Anything I need to handle frequently will be offloaded into this class for neatness.

Currently it only checks if a tileEntity implements either of the interfaces for MFcables to connect to. (I_MFCable extends both I_MFSink and I_MFSource)

 

 

Cheers in advance and sorry about the code flood, the full source is on this branch:

https://github.com/BackSpace47/main/tree/PowerSystem

Posted

Sorry to bump this, but I'm still struggling to make this work.

 

Currently it's connecting and transferrign packets perfectly in the -y direction, but none other. I've tried altering the direction code to no avail and the visual connection updates still only load after a chunk reload. I've tried both notifyBlockUpdate(x,y,z,block) and scheduleBlockUpdate(x,y,z,block,metaD), both to no avail.

If anyone has any insights into this, I'd be extrememy grateful!

 

width=800 height=449https://lh4.googleusercontent.com/-y0Z8JIlKxcY/U_rvgRmsm6I/AAAAAAAAB9M/A2kcrAVrn5w/w854-h480-no/2014-08-25_10.02.48.png[/img]

Updated Code:

package net.RPower.RPowermod.machines.power.cable;

import java.util.LinkedList;
import java.util.Queue;

import RPower.api.power.E_MFPacketType;
import RPower.api.power.I_MFSink;
import RPower.api.power.MFPacket;
import RPower.api.power.cable.I_MFCable;
import net.RPower.RPowermod.core.RPCore;
import net.RPower.RPowermod.machines.power.MFHelper;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;

public class TileEntityFluxCable extends TileEntity implements I_MFCable {
//Connections are an array of [up, Down, North, East, West, South]
public boolean[] connections = {false, false, false, false, false, false};

//whether or not the cable is lossy
public boolean insulatedCable;

//maximum limit the cable can carry
public double packetSizeLimit;

//Packets awaiting processing
public Queue<MFPacket> internalBuffer;

//automatically calculated.
public double percentageLoss;

//transfer mode, unbridged connections can only cross an intersection in straight lines (may be reserved for advanced cabling)
public boolean bridgeConnections;

public TileEntityFluxCable()
{
	this(32);
}

public TileEntityFluxCable(double packetSize)
{
	this(packetSize,false);
}

public TileEntityFluxCable(double packetSize, boolean insulated)
{
	this(packetSize,insulated,true);
}
public TileEntityFluxCable(double packetSize, boolean insulated,boolean bridged)
{
	packetSizeLimit= packetSize;
	insulatedCable=insulated;
	bridgeConnections=bridged;
	internalBuffer=new LinkedList<MFPacket>();
	checkLoss(insulated);
}

private void checkLoss(boolean insulated) {
	if(!insulated)
	{
		percentageLoss=(packetSizeLimit/MFPacket.POWERLIMIT);
	}
}

@Override
public boolean takePacket(MFPacket packet)
{
	double excess=0;
	if(!insulatedCable)
	{

		excess+=(percentageLoss*packet.getBuffer());
		packet.setBuffer(packet.getBuffer()-excess);
	}
	if(packet.getBuffer()>packetSizeLimit)
	{
		excess += packet.getBuffer()-packetSizeLimit;
		packet.setBuffer(packetSizeLimit);
	}
	powerBleed(excess);

	boolean result=false;
	result=internalBuffer.add(packet);
	return result;
}

@Override
public void writeToNBT(NBTTagCompound nbtTag) {
	int[] connectionsInt = new int[6];
	int i = 0;
	for (boolean side : connections) {
		connectionsInt[i]=connections[i]?1:0;
		i++;
	}
	nbtTag.setIntArray("connections", connectionsInt);
	nbtTag.setBoolean("insulated", insulatedCable);
	nbtTag.setBoolean("bridged", bridgeConnections);

	nbtTag.setDouble("packetLimit", packetSizeLimit);

	super.writeToNBT(nbtTag);
};

@Override
public void readFromNBT(NBTTagCompound nbtTag) {
	int[] connectionsInt = nbtTag.getIntArray("connections");
	int i = 0;
	for (boolean side : connections) {
		connections[i]=(connectionsInt[i]==1);
		i++;
	}

	insulatedCable=nbtTag.getBoolean("insulated");

	bridgeConnections=nbtTag.getBoolean("bridged");

	packetSizeLimit=nbtTag.getDouble("packetLimit");

	checkLoss(insulatedCable);

	super.readFromNBT(nbtTag);
};

@Override
public Packet getDescriptionPacket() {
	NBTTagCompound nbtTag = new NBTTagCompound();
	this.writeToNBT(nbtTag);
	//TODO: Get this damn working!
	return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbtTag);
}

@Override
public void onDataPacket(NetworkManager networkManager, S35PacketUpdateTileEntity packet) {
	readFromNBT(packet.func_148857_g());
}

@Override
public void updateEntity() {
	if(!internalBuffer.isEmpty())
	{
		MFPacket packet = internalBuffer.remove();
		boolean result=false;
		byte  direction;
		for(int i=0; i<59;i++)
		{
			int posNeg = ((int)(Math.random()*%2==0)?1:-1;
			double randXvel=Math.random()*(2*posNeg);
			double randYvel=Math.random()*(2*posNeg);
			double randZvel=Math.random()*(2*posNeg);
			this.worldObj.spawnParticle("magicCrit", xCoord, yCoord, zCoord, randXvel, randYvel, randZvel);
		}

		switch(packet.getType())
		{
		case RESPOND:
			direction = packet.getOrigin().peek();
			result = (direction!=-1);
			result = pushPacket(packet);
			break;
		default:
			direction = packet.getOrigin().peek();
			packet.getOrigin().add(randDir(direction));
			result=pushPacket(packet);
			break;
		}
	}
	super.updateEntity();
}

private byte randDir(byte initDirection) {
	byte result = -1;
	while((connectionNum()>=2)&&(result==-1||!connections[result])&&result!=initDirection)
	{
		result=(byte)(Math.random()*5);
	}
	return result;
}

public byte connectionNum() {
	byte result=0;
	for (Boolean connection : connections) {
		if(connection)
			result++;
	}
	return result;
}


public boolean checkConnections()
{
	boolean result=false;

	int xDir=0, yDir=0, zDir=0;
	for(int dir=0; dir<=5; dir++)
	{
		int modifier=(dir%2==1)?1:-1;
		System.err.println("test vars: dir="+dir+", TestCase="+(dir/2)+", modifier="+modifier+",");
		switch(dir/2)
		{
		case 2:
			xDir=modifier;
			break;
		case 1:
			zDir=modifier;
			break;
		case 0:
			yDir=modifier;
			break;
		}
		System.out.println("testing ["+xDir+","+yDir+","+zDir+"]");
		result = this.worldObj.getBlock(xCoord+xDir, yCoord+yDir, zCoord+zDir).hasTileEntity(0);
		if(result)
			result = MFHelper.checkConnectable(this.worldObj.getTileEntity(xCoord+xDir, yCoord+yDir, zCoord+zDir));	

		System.out.println("result of MF test was: "+result);

		int conDir = dir-modifier;
		System.err.println("conDir="+conDir);
		connections[conDir]=result;

		if(connections[conDir])
		{
			System.out.println("Connection found!");
			worldObj.scheduleBlockUpdate(xCoord, yCoord, zCoord, getBlockType(), worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
		}


	}

	return result;
}

@Override
public boolean pushPacket(MFPacket packet)
{

	byte direction = packet.getOrigin().peek();
	if(packet.getType()==E_MFPacketType.RESPOND)
		packet.getOrigin().pop();

	boolean result= false;
	int xDir=0, yDir=0, zDir=0;
	int modifier=(direction%2==1)?-1:1;
	//up:1, down:0, x+:5, x-:4, z+:3,z-2;
	switch(direction/2)
	{
	case 2:
		xDir=modifier;
		break;
	case 1:
		zDir=modifier;
		break;
	case 0:
		yDir=modifier;
		break;
	}
	result = this.worldObj.getBlock(xCoord+xDir, yCoord+yDir, zCoord+zDir).hasTileEntity(0);
	if(result)
		result=this.worldObj.getTileEntity(xCoord+xDir, yCoord+yDir, zCoord+zDir)instanceof I_MFSink;
	if(result)
		result=((I_MFSink)this.worldObj.getTileEntity(xCoord+xDir, yCoord+yDir, zCoord+zDir)).takePacket(packet);
	if(!result)
		powerBleed(packet.getBuffer());
	return result;
}

@Override
public boolean canUpdate()
{
	return true;
}

@Override
public double flowLimit() {
	return packetSizeLimit;
}

@Override
public void powerBleed(double excess) {
	//add power bleed to chunk atmosphere -> own effects + taint if Thaumcraft installed
	if(excess>0)
		System.err.println(""+excess+" MF bled off into atmosphere!\n");

}

@Override
public double getPacketLimit() {
	return packetSizeLimit;
}

@Override
public boolean isInsulated() {
	return insulatedCable;
}

@Override
public boolean isBridged() {
	return bridgeConnections;
}

@Override
public boolean canDeBridge() {
	return insulatedCable;
}

@Override
public boolean[] getConnections() {
	return connections;
}

}

 

Posted

Could you show me how you render your pipes? Do you have a tile entity special renderer binded somewhere?

Are the print in your check connections printing the right values? If they are not try considering make it look fancier using ForgeDirection(s can't remember if plural). Write and read nbt should be good, but check them too (they are used to sync with the client after all and you never know). While you are at it, put some print in that renderer and see if it receive the right stuff. If it does, you know where the problem lies then ;)

Check out my blog!

http://www.whov.altervista.org

Posted

Just a head's up, the model is a lot of faces:

// Date: 21/08/2014 21:03:22
// Template version 1.1
// Java generated by Techne
// Keep in mind that you still need to fill in some blanks
// - ZeuX

package net.RPower.RPowermod.model.block;

import net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable;
import net.RPower.RPowermod.renderers.block.TileEntityFluxCableRenderer;
import net.minecraft.client.model.*;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;

public class ModelFluxCableBasic extends ModelBase
{
//fields
ModelRenderer fFaceR;
ModelRenderer fFaceU;
ModelRenderer fFaceD;
ModelRenderer fFaceL;
ModelRenderer fcoreL;
ModelRenderer fcoreR;
ModelRenderer lFaceB;
ModelRenderer lFaceU;
ModelRenderer lFaceD;
ModelRenderer lFaceF;
ModelRenderer lcoreL;
ModelRenderer lcoreR;
ModelRenderer rFaceB;
ModelRenderer rFaceU;
ModelRenderer rFaceD;
ModelRenderer rFaceF;
ModelRenderer rcoreL;
ModelRenderer rcoreR;
ModelRenderer coreR;
ModelRenderer coreF;
ModelRenderer coreL;
ModelRenderer coreD;
ModelRenderer coreB;
ModelRenderer coreU;
ModelRenderer dFaceB;
ModelRenderer dFaceL;
ModelRenderer dFaceR;
ModelRenderer dFaceF;
ModelRenderer dcoreL;
ModelRenderer dcoreR;
ModelRenderer uFaceB;
ModelRenderer uFaceL;
ModelRenderer uFaceR;
ModelRenderer uFaceF;
ModelRenderer ucoreL;
ModelRenderer ucoreR;
ModelRenderer bFaceR;
ModelRenderer bFaceU;
ModelRenderer bFaceD;
ModelRenderer bFaceL;
ModelRenderer bcoreL;
ModelRenderer bcoreR;

public ModelFluxCableBasic()
{
	textureWidth = 16;
	textureHeight = 16;

	fFaceR = new ModelRenderer(this, 0, 0);
	fFaceR.addBox(0F, 0F, 0F, 6, 3, 0);
	fFaceR.setRotationPoint(-2F, 16F, -8F);
	fFaceR.setTextureSize(16, 16);
	fFaceR.mirror = true;
	setRotation(fFaceR, -2.356194F, -1.570796F, 0F);
	fFaceU = new ModelRenderer(this, 0, 0);
	fFaceU.addBox(0F, 0F, 0F, 6, 3, 0);
	fFaceU.setRotationPoint(2F, 16F, -8F);
	fFaceU.setTextureSize(16, 16);
	fFaceU.mirror = true;
	setRotation(fFaceU, 2.356194F, -1.570796F, 0F);
	fFaceD = new ModelRenderer(this, 0, 0);
	fFaceD.addBox(0F, 0F, 0F, 6, 3, 0);
	fFaceD.setRotationPoint(-2F, 16F, -8F);
	fFaceD.setTextureSize(16, 16);
	fFaceD.mirror = true;
	setRotation(fFaceD, -0.7853982F, -1.570796F, 0F);
	fFaceL = new ModelRenderer(this, 0, 0);
	fFaceL.addBox(0F, 0F, 0F, 6, 3, 0);
	fFaceL.setRotationPoint(2F, 16F, -8F);
	fFaceL.setTextureSize(16, 16);
	fFaceL.mirror = true;
	setRotation(fFaceL, 0.7853982F, -1.570796F, 0F);
	fcoreL = new ModelRenderer(this, 0, 6);
	fcoreL.addBox(0F, 0F, 0F, 6, 2, 0);
	fcoreL.setRotationPoint(-1F, 16F, -2F);
	fcoreL.setTextureSize(16, 16);
	fcoreL.mirror = true;
	setRotation(fcoreL, 1.570796F, 1.570796F, 0F);
	fcoreR = new ModelRenderer(this, 0, 6);
	fcoreR.addBox(0F, 0F, 0F, 6, 2, 0);
	fcoreR.setRotationPoint(0F, 15F, -2F);
	fcoreR.setTextureSize(16, 16);
	fcoreR.mirror = true;
	setRotation(fcoreR, 0F, 1.570796F, 0F);
	lFaceB = new ModelRenderer(this, 0, 0);
	lFaceB.addBox(0F, 0F, 0F, 6, 3, 0);
	lFaceB.setRotationPoint(2F, 16F, 2F);
	lFaceB.setTextureSize(16, 16);
	lFaceB.mirror = true;
	setRotation(lFaceB, -2.356194F, 0F, 0F);
	lFaceU = new ModelRenderer(this, 0, 0);
	lFaceU.addBox(0F, 0F, 0F, 6, 3, 0);
	lFaceU.setRotationPoint(2F, 16F, -2F);
	lFaceU.setTextureSize(16, 16);
	lFaceU.mirror = true;
	setRotation(lFaceU, 2.356194F, 0F, 0F);
	lFaceD = new ModelRenderer(this, 0, 0);
	lFaceD.addBox(0F, 0F, 0F, 6, 3, 0);
	lFaceD.setRotationPoint(2F, 16F, 2F);
	lFaceD.setTextureSize(16, 16);
	lFaceD.mirror = true;
	setRotation(lFaceD, -0.7853982F, 0F, 0F);
	lFaceF = new ModelRenderer(this, 0, 0);
	lFaceF.addBox(0F, 0F, 0F, 6, 3, 0);
	lFaceF.setRotationPoint(2F, 16F, -2F);
	lFaceF.setTextureSize(16, 16);
	lFaceF.mirror = true;
	setRotation(lFaceF, 0.7853982F, -0.0069813F, 0F);
	lcoreL = new ModelRenderer(this, 0, 6);
	lcoreL.addBox(0F, 0F, 0F, 6, 2, 0);
	lcoreL.setRotationPoint(2F, 16F, -1F);
	lcoreL.setTextureSize(16, 16);
	lcoreL.mirror = true;
	setRotation(lcoreL, 1.570796F, 0F, 0F);
	lcoreR = new ModelRenderer(this, 0, 6);
	lcoreR.addBox(0F, 0F, 0F, 6, 2, 0);
	lcoreR.setRotationPoint(2F, 15F, 0F);
	lcoreR.setTextureSize(16, 16);
	lcoreR.mirror = true;
	setRotation(lcoreR, 0F, 0F, 0F);
	rFaceB = new ModelRenderer(this, 0, 0);
	rFaceB.addBox(0F, 0F, 0F, 6, 3, 0);
	rFaceB.setRotationPoint(-8F, 16F, 2F);
	rFaceB.setTextureSize(16, 16);
	rFaceB.mirror = true;
	setRotation(rFaceB, -0.7853982F, 0F, 0F);
	rFaceU = new ModelRenderer(this, 0, 0);
	rFaceU.addBox(0F, 0F, 0F, 6, 3, 0);
	rFaceU.setRotationPoint(-8F, 14F, 0F);
	rFaceU.setTextureSize(16, 16);
	rFaceU.mirror = true;
	setRotation(rFaceU, 0.7853982F, 0F, 0F);
	rFaceD = new ModelRenderer(this, 0, 0);
	rFaceD.addBox(0F, 0F, 0F, 6, 3, 0);
	rFaceD.setRotationPoint(-8F, 18F, 0F);
	rFaceD.setTextureSize(16, 16);
	rFaceD.mirror = true;
	setRotation(rFaceD, -2.356194F, 0F, 0F);
	rFaceF = new ModelRenderer(this, 0, 0);
	rFaceF.addBox(0F, 0F, 0F, 6, 3, 0);
	rFaceF.setRotationPoint(-8F, 14F, 0F);
	rFaceF.setTextureSize(16, 16);
	rFaceF.mirror = true;
	setRotation(rFaceF, -0.7853982F, 0F, 0F);
	rcoreL = new ModelRenderer(this, 0, 6);
	rcoreL.addBox(0F, 0F, 0F, 6, 2, 0);
	rcoreL.setRotationPoint(-8F, 16F, -1F);
	rcoreL.setTextureSize(16, 16);
	rcoreL.mirror = true;
	setRotation(rcoreL, 1.570796F, 0F, 0F);
	rcoreR = new ModelRenderer(this, 0, 6);
	rcoreR.addBox(0F, 0F, 0F, 6, 2, 0);
	rcoreR.setRotationPoint(-8F, 15F, 0F);
	rcoreR.setTextureSize(16, 16);
	rcoreR.mirror = true;
	setRotation(rcoreR, 0F, 0F, 0F);
	coreR = new ModelRenderer(this, 0, 12);
	coreR.addBox(0F, 0F, 0F, 4, 4, 0);
	coreR.setRotationPoint(-2F, 14F, 2F);
	coreR.setTextureSize(16, 16);
	coreR.mirror = true;
	setRotation(coreR, 0F, 1.570796F, 0F);
	coreF = new ModelRenderer(this, 0, 12);
	coreF.addBox(0F, 0F, 0F, 4, 4, 0);
	coreF.setRotationPoint(-2F, 14F, -2F);
	coreF.setTextureSize(16, 16);
	coreF.mirror = true;
	setRotation(coreF, 0F, 0F, 0F);
	coreL = new ModelRenderer(this, 0, 12);
	coreL.addBox(0F, 0F, 0F, 4, 4, 0);
	coreL.setRotationPoint(2F, 14F, -2F);
	coreL.setTextureSize(16, 16);
	coreL.mirror = true;
	setRotation(coreL, 0F, -1.570796F, 0F);
	coreD = new ModelRenderer(this, 0, 12);
	coreD.addBox(0F, 0F, 0F, 4, 4, 0);
	coreD.setRotationPoint(2F, 18F, 2F);
	coreD.setTextureSize(16, 16);
	coreD.mirror = true;
	setRotation(coreD, 1.570796F, -3.141593F, 0F);
	coreB = new ModelRenderer(this, 0, 12);
	coreB.addBox(0F, 0F, 0F, 4, 4, 0);
	coreB.setRotationPoint(2F, 14F, 2F);
	coreB.setTextureSize(16, 16);
	coreB.mirror = true;
	setRotation(coreB, 0F, -3.141593F, 0F);
	coreU = new ModelRenderer(this, 0, 12);
	coreU.addBox(0F, 0F, 0F, 4, 4, 0);
	coreU.setRotationPoint(2F, 14F, -2F);
	coreU.setTextureSize(16, 16);
	coreU.mirror = true;
	setRotation(coreU, -1.570796F, 3.141593F, 0F);

	dFaceB = new ModelRenderer(this, 0, 0);
	dFaceB.addBox(0F, 0F, 0F, 6, 3, 0);
	dFaceB.setRotationPoint(2F, 18F, 0F);
	dFaceB.setTextureSize(16, 16);
	dFaceB.mirror = true;
	setRotation(dFaceB, 0.7853982F, 0F, 1.570796F);

	dFaceL = new ModelRenderer(this, 0, 0);
	dFaceL.addBox(0F, 0F, 0F, 6, 3, 0);
	dFaceL.setRotationPoint(0F, 18F, -2F);
	dFaceL.setTextureSize(16, 16);
	dFaceL.mirror = true;
	setRotation(dFaceL, 2.356194F, 0F, 1.570796F);
	dFaceR = new ModelRenderer(this, 0, 0);
	dFaceR.addBox(0F, 0F, 0F, 6, 3, 0);
	dFaceR.setRotationPoint(-2F, 18F, 0F);
	dFaceR.setTextureSize(16, 16);
	dFaceR.mirror = true;
	setRotation(dFaceR, 2.356194F, 0F, 1.570796F);
	dFaceF = new ModelRenderer(this, 0, 0);
	dFaceF.addBox(0F, 0F, 0F, 6, 3, 0);
	dFaceF.setRotationPoint(0F, 18F, -2F);
	dFaceF.setTextureSize(16, 16);
	dFaceF.mirror = true;
	setRotation(dFaceF, 0.7853982F, 0F, 1.570796F);
	dcoreL = new ModelRenderer(this, 0, 6);
	dcoreL.addBox(0F, 0F, 0F, 6, 2, 0);
	dcoreL.setRotationPoint(0F, 18F, -1F);
	dcoreL.setTextureSize(16, 16);
	dcoreL.mirror = true;
	setRotation(dcoreL, 1.570796F, 0F, 1.570796F);
	dcoreR = new ModelRenderer(this, 0, 6);
	dcoreR.addBox(0F, 0F, 0F, 6, 2, 0);
	dcoreR.setRotationPoint(1F, 18F, 0F);
	dcoreR.setTextureSize(16, 16);
	dcoreR.mirror = true;
	setRotation(dcoreR, 0F, 0F, 1.570796F);
	uFaceB = new ModelRenderer(this, 0, 0);
	uFaceB.addBox(0F, 0F, 0F, 6, 3, 0);
	uFaceB.setRotationPoint(2F, 8F, 0F);
	uFaceB.setTextureSize(16, 16);
	uFaceB.mirror = true;
	setRotation(uFaceB, 0.7853982F, 0F, 1.570796F);
	uFaceL = new ModelRenderer(this, 0, 0);
	uFaceL.addBox(0F, 0F, 0F, 6, 3, 0);
	uFaceL.setRotationPoint(0F, 8F, -2F);
	uFaceL.setTextureSize(16, 16);
	uFaceL.mirror = true;
	setRotation(uFaceL, 2.356194F, 0F, 1.570796F);
	uFaceR = new ModelRenderer(this, 0, 0);
	uFaceR.addBox(0F, 0F, 0F, 6, 3, 0);
	uFaceR.setRotationPoint(-2F, 8F, 0F);
	uFaceR.setTextureSize(16, 16);
	uFaceR.mirror = true;
	setRotation(uFaceR, 2.356194F, 0F, 1.570796F);
	uFaceF = new ModelRenderer(this, 0, 0);
	uFaceF.addBox(0F, 0F, 0F, 6, 3, 0);
	uFaceF.setRotationPoint(0F, 8F, -2F);
	uFaceF.setTextureSize(16, 16);
	uFaceF.mirror = true;
	setRotation(uFaceF, 0.7853982F, 0F, 1.570796F);
	ucoreL = new ModelRenderer(this, 0, 6);
	ucoreL.addBox(0F, 0F, 0F, 6, 2, 0);
	ucoreL.setRotationPoint(0F, 8F, -1F);
	ucoreL.setTextureSize(16, 16);
	ucoreL.mirror = true;
	setRotation(ucoreL, 1.570796F, 0F, 1.570796F);
	ucoreR = new ModelRenderer(this, 0, 6);
	ucoreR.addBox(0F, 0F, 0F, 6, 2, 0);
	ucoreR.setRotationPoint(1F, 8F, 0F);
	ucoreR.setTextureSize(16, 16);
	ucoreR.mirror = true;
	setRotation(ucoreR, 0F, 0F, 1.570796F);
	bFaceR = new ModelRenderer(this, 0, 0);
	bFaceR.addBox(0F, 0F, 0F, 6, 3, 0);
	bFaceR.setRotationPoint(-2F, 16F, 2F);
	bFaceR.setTextureSize(16, 16);
	bFaceR.mirror = true;
	setRotation(bFaceR, -2.356194F, -1.570796F, 0F);
	bFaceU = new ModelRenderer(this, 0, 0);
	bFaceU.addBox(0F, 0F, 0F, 6, 3, 0);
	bFaceU.setRotationPoint(2F, 16F, 2F);
	bFaceU.setTextureSize(16, 16);
	bFaceU.mirror = true;
	setRotation(bFaceU, 2.356194F, -1.570796F, 0F);
	bFaceD = new ModelRenderer(this, 0, 0);
	bFaceD.addBox(0F, 0F, 0F, 6, 3, 0);
	bFaceD.setRotationPoint(-2F, 16F, 2F);
	bFaceD.setTextureSize(16, 16);
	bFaceD.mirror = true;
	setRotation(bFaceD, -0.7853982F, -1.570796F, 0F);
	bFaceL = new ModelRenderer(this, 0, 0);
	bFaceL.addBox(0F, 0F, 0F, 6, 3, 0);
	bFaceL.setRotationPoint(2F, 16F, 2F);
	bFaceL.setTextureSize(16, 16);
	bFaceL.mirror = true;
	setRotation(bFaceL, 0.7853982F, -1.570796F, 0F);
	bcoreL = new ModelRenderer(this, 0, 6);
	bcoreL.addBox(0F, 0F, 0F, 6, 2, 0);
	bcoreL.setRotationPoint(-1F, 16F, 8F);
	bcoreL.setTextureSize(16, 16);
	bcoreL.mirror = true;
	setRotation(bcoreL, 1.570796F, 1.570796F, 0F);
	bcoreR = new ModelRenderer(this, 0, 6);
	bcoreR.addBox(0F, 0F, 0F, 6, 2, 0);
	bcoreR.setRotationPoint(0F, 15F, 8F);
	bcoreR.setTextureSize(16, 16);
	bcoreR.mirror = true;
	setRotation(bcoreR, 0F, 1.570796F, 0F);
}

public void render(TileEntity entity, float f, float f1, float f2, float f3, float f4, float f5)
{
	boolean[] connections = {false, false, false, false, false, false};
	if (entity instanceof TileEntityFluxCable)
		connections= ((TileEntityFluxCable)entity).connections;
	super.render((Entity)null, f, f1, f2, f3, f4, f5);
	setRotationAngles(f, f1, f2, f3, f4, f5, (Entity)null);
	if (connections[3]){
		fFaceR.render(f5);
		fFaceU.render(f5);
		fFaceD.render(f5);
		fFaceL.render(f5);
		fcoreL.render(f5);
		fcoreR.render(f5);
	}
	if (connections[5]){
		lFaceB.render(f5);
		lFaceU.render(f5);
		lFaceD.render(f5);
		lFaceF.render(f5);
		lcoreL.render(f5);
		lcoreR.render(f5);
	}
	if (connections[4]){
		rFaceB.render(f5);
		rFaceU.render(f5);
		rFaceD.render(f5);
		rFaceF.render(f5);
		rcoreL.render(f5);
		rcoreR.render(f5);
	}

	coreR.render(f5);
	coreF.render(f5);
	coreL.render(f5);
	coreD.render(f5);
	coreB.render(f5);
	coreU.render(f5);

	if (connections[1]){
		dFaceB.render(f5);
		dFaceL.render(f5);
		dFaceR.render(f5);
		dFaceF.render(f5);
		dcoreL.render(f5);
		dcoreR.render(f5);
	}
	if (connections[0]){
		uFaceB.render(f5);
		uFaceL.render(f5);
		uFaceR.render(f5);
		uFaceF.render(f5);
		ucoreL.render(f5);
		ucoreR.render(f5);
	}
	if (connections[2]){
		bFaceR.render(f5);
		bFaceU.render(f5);
		bFaceD.render(f5);
		bFaceL.render(f5);
		bcoreL.render(f5);
		bcoreR.render(f5);
	}
}

private void setRotation(ModelRenderer model, float x, float y, float z)
{
	model.rotateAngleX = x;
	model.rotateAngleY = y;
	model.rotateAngleZ = z;
}

public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity){
	super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
}

}

 

As for binding, yes it's registered in the clientProxy in the function:

@Override
public void registerRenderers(){
	ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFluxCable.class, new TileEntityFluxCableRenderer());
}

 

From the console output, it finds the cables on the right sides and returns "true", if I set the connections array manually, either in the code or with the onBlockActivated, I get get it to correctly display or connect to any dirction I wish without issue, it really is just the automatic connection mode. :/

I hadn't heard of ForgeDirections though, I'll take a look at that, thanks! I was using the side-to-direction mapping that Grey's site gives, calculating the details from the (0 to 5)%2 for positive/negative switching and (0 to 5)/2 for the three axis.

Posted

In my opinion I think you would be better off hardcoding it in GL, because this way you don't have to create a new model in Techne for every option. You can simply use GL.rotatef(params here) and only have to create the basic pipe and the pipe connection. Also, ForgeDirection is an Enum which pairs a number to every compass point you can be looking at and UP and DOWN. So, for instance, 0 is South, and 1 is North, and things like that. You can use these to determine on which compass point/UP or DOWN the pipe is at and create a visual connection. As to your mechanical problem, I'm not entirely sure of the solution, as I have never really done something like it, but I'm sure someone else will present the solution.

I am the self-nominated Lord of the Mastodons and don't you dare deny it. ;) Also, check out my YouTube channel: https://www.youtube.com/user/DerpDerp44/

Posted

Yea, I would really recommend using OpenGL (here's a tut by a great teacher:

). Moreover, if I recall correctly, Forge directions has arrays for every direction like {+1;0;0} for north or something, so you don't have to use that huge (compared to how long it could become) code to get the direction you want. Besides, it looks to me like your problem is indeed in check connections, so we'll need to improve it. I might write something for you later today (for reference: 12 am now)

Check out my blog!

http://www.whov.altervista.org

Posted

I think I'll have to swap over to the directions Enum actually, it sounds much neater and somewhat less frustrating.

as for the openGL, I've been sorely tempted to, this started out as a proof of cencept, to let me see the connections that the pipes were making on the code level.

 

also, another little update, by adding the following to the Block class, I'm getting some rather interesting results..

@Override
public void onNeighborChange(IBlockAccess world, int x, int y, int z,int tileX, int tileY, int tileZ) {
	if(world.getBlock(tileX, tileY, tileZ).hasTileEntity(0) &&MFHelper.checkConnectable(world.getTileEntity(tileX, tileY, tileZ)))
	{
		int diffX=x-tileX;
		int diffY=y-tileY;
		int diffZ=z-tileZ;

		int side = 0;

		if (diffX!=0)
			side=4;
		if (diffZ!=0)
			side=2;
		if (diffY!=0)
			side=0;

		int sideDir=(diffX<0||diffY<0|diffZ<0)?0:1;

		side+=sideDir;

		((TileEntityFluxCable)world.getTileEntity(x, y, z)).connections[side]=true;
		((TileEntityFluxCable)world.getTileEntity(tileX, tileY, tileZ)).connections[side-=sideDir]=true;
	}
	super.onNeighborChange(world, x, y, z, tileX, tileY, tileZ);
}

 

width=800 height=449https://lh6.googleusercontent.com/-N4-qAOds6d4/U_sGZXq5OJI/AAAAAAAAB9w/vRdSYcWbflI/w854-h480-no/2014-08-25_11.43.51.png[/img]

 

Also, cheers Whov and Mastodon, I'll slice and dice checkConnections() myself too (11:50 am here, so plenty of the time left in the day for me)

Posted

Also, I think that something you should try to do is integrate the visual code and the mechanical code, so that automatically when it creates a visual connection it creates a mechanical connection. This is what many big name mod authors do, and it seems to work great, so maybe try it out instead of hardcoding every single possibility of connection, try that. Some pseudo code:

 

Your render class:

 

public void visualConnection() {

    //Your connection code here

}

 

public void onVisualConnection() {

    if(visualConnection == true) {

        mechanicalConnection();

    }

}

 

public void mechanicalConnection() {

  //Your mechanical connection code here

}

 

This way, whenever you make a visual connection, a mechanical connection automatically gets created. I probably did not make that realistic, but then again it's pseudo code from a dev.

I am the self-nominated Lord of the Mastodons and don't you dare deny it. ;) Also, check out my YouTube channel: https://www.youtube.com/user/DerpDerp44/

Posted

I'll admit that I'm loathe to do that, while it could have offload some processing to clients, it also relies on the renderer being called for the connections to be functional.

I'm going to look into the tesselator now and scrap most of my old code by the way. It also adds in some interesting possibilities for efficiency.

Posted

public class test extends TileEntity {

 

public boolean[] connections = new int[]{0,0,0,0,0,0};

 

public void checkConnections() {

ForgeDirection dir;

TileEntity tile;

for (int i=0;i<6;i++) {

dir = ForgeDirection.getOrientation(i);

tile = this.worldObj.getTileEntity(this.xCoord+dir.offsetX, this.yCoord+dir.offsetY, this.zCoord+dir.offsetZ);

if (tile==null) {

connections = 0;

        } else if (tile instanceof test) {

        connections = 1;

        ((test)tile).connections[ForgeDirection.OPPOSITES] = 1;

        }

  }

}

}

 

Might work?

Check out my blog!

http://www.whov.altervista.org

Posted

I'll admit that I'm loathe to do that, while it could have offload some processing to clients, it also relies on the renderer being called for the connections to be functional.

I'm going to look into the tesselator now and scrap most of my old code by the way. It also adds in some interesting possibilities for efficiency.

 

Didn't really think of that, thanks for bringing that up. In that case, it is probably not a good idea to do it specifically the way I pseudo coded it, maybe have the renderer rely on the mechanical connection, but it probably would be a good idea to find some way to get the code to realize that in the event of either connection not happening, make it happen so that things work.

I am the self-nominated Lord of the Mastodons and don't you dare deny it. ;) Also, check out my YouTube channel: https://www.youtube.com/user/DerpDerp44/

Posted

Thanks for the suggestion Whov, but since moving over to using direction Enums, I've kind of gutted the old code for now, this recode should also support "compound directions" too, or in other words, Diagonally connecting pipes.

Cheers again for the suggestion of using Tessellator instead, it's proving a little hit&miss to rebuild the model but definitely worth it. I'll repost here with news of either success or failure with this recode.

Posted

Warning: Code Flood Incoming Below

I've torn apart the code and rewritten a lot of it, by and large, it's cleaner and stabler, but I am getting a really strange bug now.

If I check the number of connections on a pipe block, it seems to spawn with 6 connections in it's list even with no blocks around it and this is hampering my efforts to test individual pipe rendering directions working together.

 

Just to clarify, the rendering I can now handle fine, it's the weird connection list behaviour that's confusing me now.

 

[spoiler= Interfaces]

package RPower.api.power.cable;

import java.util.List;

import RPower.api.power.I_MFSink;
import RPower.api.power.I_MFSource;

public interface I_MFCable extends I_MFSink, I_MFSource{
public double getPacketLimit();
public boolean isInsulated();
public boolean isBridged();
public boolean canDeBridge();
public List<I_PipeDirection> getConnections();
public void formConnection(boolean twoWay, int x, int y, int z);
public void breakConnection(I_PipeDirection direction);
}

package RPower.api.power.cable;

public interface I_PipeDirection {

public void setTarget(int[] target);

public int[] getTarget();

public byte toByte();

}

 

 

[spoiler=Abstract Classes]

package RPower.api.power.cable;

public class A_PipeDirection implements I_PipeDirection {

protected int[] target = {0,0,0};

public A_PipeDirection(int xOffset, int yOffset, int zOffset) {
	int[] targetArr= {xOffset,yOffset,zOffset};
	setTarget(targetArr);
}

public A_PipeDirection(byte b) {
	//y = b/100 (nearest whole)
	int yOffset = (byte)b/100;

	//remove the processed value from the byte
	b-=(100*yOffset);

	//x = (b/10)-1 (again, nearest whole and convert 0-> -1, 1 -> 0, 2 -> 1)
	int xOffset = (b/10)-1;

	//remove the processed value from the byte
	b-= (10*(xOffset+1));

	//z = b-1 (converting 0-> -1, 1 -> 0, 2 -> 1)
	int zOffset = b-1;

	int[] targetArr= {xOffset,yOffset,zOffset};
	setTarget(targetArr);
}

@Override
public void setTarget(int[] target) {
	this.target = target;

}

@Override
public int[] getTarget() {
	return target;
}

@Override
public byte toByte() {
	//=(100*y)+(10*(x+1))+(z+1)
	//used for saving in NBT
	byte result = (byte) ((100*target[1]) + (10*(1+target[0])) + (1+target[2]));
	return result;
}

}

 

 

[spoiler=normal API classes]

package RPower.api.power;


import java.util.Stack;

public class MFPacket
{
public static final double POWERLIMIT = 2048; 
private E_MFPacketType packetType;
private Stack<Byte> packetOrigin;
private double buffer;

public MFPacket(E_MFPacketType type)
{
	setType(type);
	setBuffer(0);
	packetOrigin = new Stack();
	packetOrigin.add((byte)-1);

}

public E_MFPacketType getType()
{
	return packetType;

}

public void setType(E_MFPacketType type)
{
	packetType=type;
}

public double getBuffer()
{
	return buffer;
}	

public void setBuffer(double amount)
{
	if(amount<0)
		amount=0;
	buffer=amount;

}

public Stack<Byte> getOrigin()
{
	return packetOrigin;
}
}

package RPower.api.power;

import RPower.api.power.cable.I_MFCable;
import RPower.api.power.cable.I_PipeDirection;
import net.RPower.RPowermod.machines.power.cable.PipeDirection;
import net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable;
import net.minecraft.tileentity.TileEntity;

public class MFHelper {


public static synchronized boolean checkConnectable(TileEntity tileEntity) {
	boolean result = (tileEntity instanceof I_MFSink || tileEntity instanceof I_MFSource);
	if (result)
		System.out.println("Success!");
	System.out.println(tileEntity.toString());
	return result;
}

}

 

[spoiler=Block & TileEntity]

package net.RPower.RPowermod.machines.power.cable;

import RPower.api.power.E_MFPacketType;
import RPower.api.power.MFHelper;
import RPower.api.power.MFPacket;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class BlockFluxCable extends BlockContainer{

public BlockFluxCable(Material p_i45394_1_) {
	super(p_i45394_1_);

}

@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int metaD,  float hitX, float hitY, float hitZ)
{
//		MFPacket temp = new MFPacket(E_MFPacketType.REQUEST);
//		((TileEntityFluxCable)world.getTileEntity(x, y, z)).takePacket(temp);

	System.err.println("This pipe has "+((TileEntityFluxCable)world.getTileEntity(x, y, z)).getConnections().size()+" connections.");

	return false;
}

@Override
public void onBlockAdded(World world, int x, int y, int z) {
	((TileEntityFluxCable)world.getTileEntity(x, y, z)).checkConnections();
	super.onBlockAdded(world, x, y, z);
}

@Override
public TileEntity createNewTileEntity(World world, int metadata) {
	TileEntity cable = new TileEntityFluxCable(32);
	return cable;
}

@Override
public boolean isAir(IBlockAccess world, int x, int y, int z) {
	return false;
}

@Override
protected boolean canSilkHarvest() {
	return false;
};

@Override
public boolean canSilkHarvest(World world, EntityPlayer player, int x, int y, int z, int metadata) {
	return false;
};

@Override
public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) {
	return false;
}

@SideOnly(Side.CLIENT)
@Override
public boolean renderAsNormalBlock()
{
	return false;
}

@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockAccess blockAccess, int x, int y, int z, int side) {
	return false;
};

@SideOnly(Side.CLIENT)
@Override
public boolean isOpaqueCube()
{
	return false;
}

@Override
public int getRenderType() {
	return -1;
}



}

package net.RPower.RPowermod.machines.power.cable;

import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

import RPower.api.power.E_MFPacketType;
import RPower.api.power.I_MFSink;
import RPower.api.power.MFHelper;
import RPower.api.power.MFPacket;
import RPower.api.power.cable.I_MFCable;
import RPower.api.power.cable.I_PipeDirection;
import net.RPower.RPowermod.core.RPCore;
import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;

public class TileEntityFluxCable extends TileEntity implements I_MFCable {
//Connections are an array of [up, Down, North, East, West, South]
public List<I_PipeDirection> connections;

//whether or not the cable is lossy
public boolean insulatedCable;

//maximum limit the cable can carry
public double packetSizeLimit;

//Packets awaiting processing
public Queue<MFPacket> internalBuffer;

//automatically calculated.
public double percentageLoss;

//transfer mode, unbridged connections can only cross an intersection in straight lines (may be reserved for advanced cabling)
public boolean bridgeConnections;

public TileEntityFluxCable()
{
	this(32);
}

public TileEntityFluxCable(double packetSize)
{
	this(packetSize,false);
}

public TileEntityFluxCable(double packetSize, boolean insulated)
{
	this(packetSize,insulated,true);
}
public TileEntityFluxCable(double packetSize, boolean insulated,boolean bridged)
{
	packetSizeLimit= packetSize;
	insulatedCable=insulated;
	bridgeConnections=bridged;
	connections=new LinkedList<I_PipeDirection>();
	internalBuffer=new LinkedList<MFPacket>();
	checkLoss(insulated);
}

private void checkLoss(boolean insulated) {
	if(!insulated)
	{
		percentageLoss=(packetSizeLimit/MFPacket.POWERLIMIT);
	}
}

@Override
public boolean takePacket(MFPacket packet)
{
	double excess=0;
	if(!insulatedCable)
	{

		excess+=(percentageLoss*packet.getBuffer());
		packet.setBuffer(packet.getBuffer()-excess);
	}
	if(packet.getBuffer()>packetSizeLimit)
	{
		excess += packet.getBuffer()-packetSizeLimit;
		packet.setBuffer(packetSizeLimit);
	}
	powerBleed(excess);

	boolean result=false;
	result=internalBuffer.add(packet);
	return result;
}

@Override
public void writeToNBT(NBTTagCompound nbtTag) {
	byte[] connectionsArr = new byte[connections.size()];
	int i =0;
	for (I_PipeDirection connection: connections) {
		connectionsArr[i] = connection.toByte();
		i++;
	}
	nbtTag.setByteArray("connections", connectionsArr);
	nbtTag.setBoolean("insulated", insulatedCable);
	nbtTag.setBoolean("bridged", bridgeConnections);

	nbtTag.setDouble("packetLimit", packetSizeLimit);

	super.writeToNBT(nbtTag);
};

@Override
public void readFromNBT(NBTTagCompound nbtTag) {
	byte[] connectionsArr = nbtTag.getByteArray("connections");
	for (byte b : connectionsArr) {
		I_PipeDirection temp = new PipeDirection(b);
		connections.add(temp);
	}

	insulatedCable=nbtTag.getBoolean("insulated");

	bridgeConnections=nbtTag.getBoolean("bridged");

	packetSizeLimit=nbtTag.getDouble("packetLimit");

	checkLoss(insulatedCable);

	super.readFromNBT(nbtTag);
}

@Override
public Packet getDescriptionPacket() {
	NBTTagCompound nbtTag = new NBTTagCompound();
	this.writeToNBT(nbtTag);
	//TODO: Get this damn working!
	return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbtTag);
}

@Override
public void onDataPacket(NetworkManager networkManager, S35PacketUpdateTileEntity packet) {
	readFromNBT(packet.func_148857_g());
}

@Override
public void updateEntity() {
	if(!internalBuffer.isEmpty())
	{
		MFPacket packet = internalBuffer.remove();
		boolean result=false;
		byte  direction;
		for(int i=0; i<59;i++)
		{
			int posNeg = ((int)(Math.random()*%2==0)?1:-1;
			double randXvel=Math.random()*(2*posNeg);
			double randYvel=Math.random()*(2*posNeg);
			double randZvel=Math.random()*(2*posNeg);
			this.worldObj.spawnParticle("magicCrit", xCoord, yCoord, zCoord, randXvel, randYvel, randZvel);
		}

		switch(packet.getType())
		{
		case RESPOND:
			direction = packet.getOrigin().peek();
			result = (direction!=-1);
			result = pushPacket(packet);
			break;
		default:
			direction = packet.getOrigin().peek();
			packet.getOrigin().add(randDir(direction).toByte());
			result=pushPacket(packet);
			break;
		}
	}
	super.updateEntity();
}

private I_PipeDirection randDir(byte initDirection) {
	int randNum=(int)(Math.random()*connections.size());
	return connections.get(randNum);
}


public boolean checkConnections()
{
	boolean result=false;
	int x,y,z;
	for(x=-1;x<2;x++)
	{
		for(y=-1;y<2;y++)
		{
			for(z=-1;z<2;z++)
			{
				Block target = worldObj.getBlock(xCoord+x, yCoord+y, zCoord+z); 
				if(target.hasTileEntity(target.getDamageValue(worldObj, xCoord+x, yCoord+y, zCoord+z))&&MFHelper.checkConnectable(worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z)))
				{
					boolean twoWay = (worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))instanceof I_MFCable;
					formConnection(twoWay, x,y,z);
				}
			}
		}
	}


	return result;
}

@Override
public void formConnection(boolean twoWay, int x, int y, int z) {
	connections.add(new PipeDirection(x, y, z));
	if (twoWay)
		((I_MFCable)(worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))).formConnection(false, -x, -y, -z);
	System.out.println("connection formed");
}

@Override
public void breakConnection(I_PipeDirection direction) {
//		if ((worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))instanceof I_MFCable)
//			((I_MFCable)(worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))).formConnection(false, -x, -y, -z);
//		System.out.println("connection removed");
//		connections.remove(direction);
}

@Override
public boolean pushPacket(MFPacket packet)
{

	byte direction = packet.getOrigin().peek();
	if(packet.getType()==E_MFPacketType.RESPOND)
		packet.getOrigin().pop();

	boolean result= false;
	int[]origin = {xCoord,yCoord,zCoord};
	int[] target = new PipeDirection(direction).getTarget();
	for(int i=0;i<3;i++)
	{
		target[i]+=origin[i];
	}
	result = this.worldObj.getBlock(target[0], target[1], target[2]).hasTileEntity(0);
	if(result)
		result=this.worldObj.getTileEntity(target[0], target[1], target[2])instanceof I_MFSink;
	if(result)
		result=((I_MFSink)this.worldObj.getTileEntity(target[0], target[1], target[2])).takePacket(packet);
	if(!result)
		powerBleed(packet.getBuffer());
	return result;
}

@Override
public boolean canUpdate()
{
	return true;
}

@Override
public double flowLimit() {
	return packetSizeLimit;
}

@Override
public void powerBleed(double excess) {
	//add power bleed to chunk atmosphere -> own effects + taint if Thaumcraft installed
	if(excess>0)
		System.err.println(""+excess+" MF bled off into atmosphere!\n");

}

@Override
public double getPacketLimit() {
	return packetSizeLimit;
}

@Override
public boolean isInsulated() {
	return insulatedCable;
}

@Override
public boolean isBridged() {
	return bridgeConnections;
}

@Override
public boolean canDeBridge() {
	return insulatedCable;
}

@Override
public List<I_PipeDirection> getConnections() {
	return connections;
}

}

 

 

[spoiler=Renderer]

package net.RPower.RPowermod.renderers.block;

import org.lwjgl.opengl.GL11;

import RPower.api.power.cable.I_PipeDirection;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.client.shader.TesselatorVertexState;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;

/**
* 
* @author Minothor, Flenix
*Renders the card Decks in the world
*Adapted from Flenix's Tutorial at:
*http://www.minecraftforge.net/wiki/Rendering_a_Techne_Model_as_a_Block
*/

//TODO: Cancel rendering if not visible
//Current Idea: Player.yaw/pitch trigonometry && sky light
public class TileEntityFluxCableRenderer extends TileEntitySpecialRenderer {
private final ResourceLocation texture;
public static int blockRenderId;
public static final float pixel = 1.0F/16; 


public TileEntityFluxCableRenderer() {
	blockRenderId = RenderingRegistry.getNextAvailableRenderId();
	texture = new ResourceLocation(net.RPower.RPowermod.core.RPCore.modid+":textures/blocks/fluxCable.png");

}



@Override
public void renderTileEntityAt(TileEntity entity, double x, double y, double z, float scale) {
	//binding the textures
        Minecraft.getMinecraft().renderEngine.bindTexture(texture);
	GL11.glPushMatrix();
	//initial location (what's up with the 0.5 and 1.5 difference I wonder)
	GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F);
	GL11.glDisable(GL11.GL_CULL_FACE);
	drawHub();

         //let LWGL know we're doing more matixy manipulation stuff
         
         //rotate to avoid model rendering upside down
         for (I_PipeDirection connection : ((TileEntityFluxCable)entity).connections) {
        	 int[] target = connection.getTarget();
        	 float[] angles = {0,0,0};
        	 if(target[1]!=0)
        	 {
        		 if((target[0]==0)&&(target[2]==0))
        		 {
        			 angles[2]=90F;
        		 } else {
        			 angles[2]=35F;
        		 }
        	 }
        	 if((target[0]!=0)&&(target[2]!=0))
        	 {
        		 angles[0]=45;
        		 angles[2]=45;
        	 } else {
        		 angles[0]=90;
        		 angles[2]=90;
        	 }
        	 angles[0]*=target[0];
        	 angles[1]*=target[1];
    		 angles[2]*=target[2];
        	 
        	 
		drawConnector(angles);
	}
        
         //pop both sections off the render stack
         
         GL11.glPopMatrix();
         //System.out.println("FOV : "+Minecraft.getMinecraft().gameSettings.fovSetting);
         GL11.glEnable(GL11.GL_CULL_FACE);
}
 private void drawHub() {
	Tessellator tessellator = Tessellator.instance;
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(90, 1, 0, 0); //90x
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(90, 1, 0, 0); //180x
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(90, 1, 0, 0); //270x
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(90, 1, 0, 0);
	GL11.glRotatef(90, 0, 1, 0); 
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(180, 0, 1, 0); 
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(90, 0, 1, 0);

}

 private void drawRails(int size)
 {

	 GL11.glPushMatrix();
	 GL11.glRotatef(45, 1, 0, 0);
	 Tessellator tessellator = Tessellator.instance;
	 drawRail(size, tessellator);
	 GL11.glRotatef(90, 1, 0, 0);
	 drawRail(size, tessellator);
	 GL11.glRotatef(90, 1, 0, 0);
	 drawRail(size, tessellator);
	 GL11.glRotatef(90, 1, 0, 0);
	 drawRail(size, tessellator);
	 GL11.glRotatef(90, 1, 0, 0);
	 GL11.glRotatef(-45, 1, 0, 0);
	 GL11.glPopMatrix();
 }



private void drawRail(int size, Tessellator tessellator) {
	float offset=27.4F;
	GL11.glRotatef(45F-offset, 1, 0, 0);
	GL11.glRotatef(-offset, 1, 0, 0);
	tessellator.startDrawingQuads();
	 tessellator.addVertexWithUV(0, 0.5*pixel, -2*pixel, size*pixel, 1*pixel);
	 tessellator.addVertexWithUV(size*pixel, 0.5*pixel, -2*pixel, 0*pixel, 0*pixel);
	 tessellator.addVertexWithUV(size*pixel, -0.5*pixel, -2*pixel, 0*pixel, 0*pixel);
	 tessellator.addVertexWithUV(0, -0.5*pixel, -2*pixel, size*pixel, 1*pixel);
	 tessellator.draw();
	 GL11.glRotatef(offset, 1, 0, 0);
	 tessellator.startDrawingQuads();
	 tessellator.addVertexWithUV(0, 0.5*pixel, -2*pixel, size*pixel, 2*pixel);
	 tessellator.addVertexWithUV(size*pixel, 0.5*pixel, -2*pixel, 0*pixel, 1*pixel);
	 tessellator.addVertexWithUV(size*pixel, -0.5*pixel, -2*pixel, 0*pixel, 1*pixel);
	 tessellator.addVertexWithUV(0, -0.5*pixel, -2*pixel, size*pixel, 2*pixel);
	 tessellator.draw();
	 GL11.glRotatef(-45F+offset, 1, 0, 0);
}

 private void drawCore(int size)
 {
	 GL11.glPushMatrix();
	 Tessellator tessellator = Tessellator.instance;

	 tessellator.startDrawingQuads();
	 tessellator.addVertexWithUV(0, 1*pixel, 0, size*pixel, 8*pixel);
	 tessellator.addVertexWithUV(size*pixel, 1*pixel, 0, 0*pixel, 8*pixel);
	 tessellator.addVertexWithUV(size*pixel, -1*pixel, 0, 0*pixel, 6*pixel);
	 tessellator.addVertexWithUV(0, -1*pixel, 0, size*pixel, 6*pixel);
	 tessellator.draw();
	 GL11.glRotatef(90, 1, 0, 0);
	 tessellator.startDrawingQuads();
	 tessellator.addVertexWithUV(0, 1*pixel, 0, size*pixel, 8*pixel);
	 tessellator.addVertexWithUV(size*pixel, 1*pixel, 0, 0*pixel, 8*pixel);
	 tessellator.addVertexWithUV(size*pixel, -1*pixel, 0, 0*pixel, 6*pixel);
	 tessellator.addVertexWithUV(0, -1*pixel, 0, size*pixel, 6*pixel);
	 tessellator.draw();
	 GL11.glRotatef(90, -1, 0, 0);
	 GL11.glPopMatrix();
 }



private void drawConnector(float[] angle) {
	int size = 8;
	if((angle[1]!=90)||(angle[1]!=90))
		size+=3;
	if(((angle[0]!=90)||(angle[2]!=90))&&((angle[0]!=-90)||(angle[2]!=-90)))
		size+=3;

	GL11.glRotatef(angle[0], 1, 0, 0);
	GL11.glRotatef(angle[1], 0, 1, 0);
	GL11.glRotatef(angle[2], 0, 0, 1);

	 drawCore(size);
	 drawRails(size);

	 GL11.glRotatef(-angle[2], 0, 0, 1);
	 GL11.glRotatef(-angle[1], 0, 1, 0);
	 GL11.glRotatef(-angle[0], 1, 0, 0);
}



private void adjustLightFixture(World world, int x, int y, int z, Block block) {
         Tessellator tess = Tessellator.instance;
         float brightness = block.getLightValue(world, x, y, z);
         int skyLight = world.getLightBrightnessForSkyBlocks(x, y, z, 0);
         int modulousModifier = skyLight % 65536;
         int divModifier = skyLight / 65536;
         tess.setColorOpaque_F(brightness, brightness, brightness);
         OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit,  modulousModifier,  divModifier);
}

}

 

 

[spoiler=Console Output]

[12:11:17] [server thread/INFO]: ForgeDevName[local:E:59a8daed] logged in with entity id 184 at (-348.99236659743696, 4.624356365163005, 1024.041203547941)

[12:11:17] [server thread/INFO]: ForgeDevName joined the game

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@312170df

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@312170df

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@312170df

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@7be0e5ee

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@7be0e5ee

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@7be0e5ee

connection formed

connection formed

This pipe has 6 connections.

This pipe has 6 connections.

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@16db3e02

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@16db3e02

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@16db3e02

connection formed

connection formed

This pipe has 6 connections.

This pipe has 6 connections.

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@7be0e5ee

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@533052d7

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@7be0e5ee

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@533052d7

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@7be0e5ee

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@533052d7

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@1cf07d10

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@16db3e02

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@1cf07d10

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@16db3e02

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@1cf07d10

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@16db3e02

connection formed

connection formed

This pipe has 9 connections.

This pipe has 9 connections.

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@1cf07d10

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@16db3e02

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@4329acba

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@1cf07d10

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@16db3e02

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@4329acba

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@1cf07d10

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@16db3e02

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@4329acba

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@1cf07d10

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@3bf7e8a

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@4329acba

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@1cf07d10

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@3bf7e8a

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@4329acba

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@1cf07d10

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@3bf7e8a

connection formed

connection formed

Success!

net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable@4329acba

connection formed

connection formed

This pipe has 12 connections.

This pipe has 15 connections.

This pipe has 9 connections.

This pipe has 15 connections.

This pipe has 12 connections.

This pipe has 15 connections.

This pipe has 9 connections.

This pipe has 15 connections.

[12:13:16] [Client thread/INFO]: [CHAT] Saved screenshot as 2014-08-26_12.13.16.png

 

 

Result of above testing:

width=800 height=449https://lh4.googleusercontent.com/-AQwAhw6jNJE/U_xeCFIR-ZI/AAAAAAAAB-Y/Ui_Nkaqezto/w854-h480-no/2014-08-26_12.13.16.png[/img]

 

 

Mockups of designed behaviours:

width=800 height=449https://lh6.googleusercontent.com/-N4-qAOds6d4/U_sGZXq5OJI/AAAAAAAAB9w/vRdSYcWbflI/w854-h480-no/2014-08-25_11.43.51.png[/img]

width=800 height=449https://lh4.googleusercontent.com/-pYd_nllX6ds/U_tKtnjkPyI/AAAAAAAAB-E/qGGlsLewXi0/w854-h480-no/2014-08-25_16.38.51.png[/img]

Posted

The only thing I can see that's obvious is that I forgot to stop the pipe from including itself in the connections, but even after I changed the checkConnection code to ignore the centre block:

boolean centre = (x==0)&&(y==0)&&(z==0);
				if(target.hasTileEntity(target.getDamageValue(worldObj, xCoord+z, yCoord+y, zCoord+z))&&MFHelper.checkConnectable(worldObj.getTileEntity(xCoord+z, yCoord+y, zCoord+z)))
				{
					if(!centre){
						boolean twoWay = (worldObj.getTileEntity(xCoord+z, yCoord+y, zCoord+z))instanceof I_MFCable;
						formConnection(twoWay, x,y,z);
					}
				}

It's still returning 4 connections :/

 

EDIT: Changed the check to be inside the formConnection() function, it now disregards any that have x,y,z all set to 0.

Still struggling to find all the pipes though, it only appears to be detecting pipes that satisfy these relative conditions:

(y<0, x>0, z>0)

any ideas what's going on?

Posted

Cheers for the suggestions and help everyone, after swapping over to Tesselator and handling directions in a class similar to an ENUM I've managed to get it working, the Renderer is a bit of a mess of "if()" statements though, but for now it works:

 

width=800 height=449https://lh6.googleusercontent.com/-LgFEnwWolU4/U_2YFF6-3kI/AAAAAAAAB-s/hBZU0QYU_Ws/w854-h480-no/2014-08-27_10.29.42.png[/img]

 

Fixed Abstract Class for PipeDirection (saving and loading to byte array for the NBT was the main issue)

package RPower.api.power.cable;

public abstract class A_PipeDirection implements I_PipeDirection {

protected int[] target = {0,0,0};

public A_PipeDirection(int xOffset, int yOffset, int zOffset) {
	int[] targetArr= {xOffset,yOffset,zOffset};
	setTarget(targetArr);
}

//TODO: Solve why connections of Y= 1, X&Z=0 evaluate to -89 instead of 111.

public A_PipeDirection(byte b) {
	System.out.println("["+b+"]");
	//y = b/100 (nearest whole)
	int yOffset = (byte)b/100;
	System.out.println(b+" yO:"+yOffset);

	//remove the processed value from the byte
	b-=(100*yOffset);
	System.out.println(" "+b);
	if(b<0)
		b*=-1;
	//x = (b/10)-1 (again, nearest whole and convert 0-> -1, 1 -> 0, 2 -> 1)
	int xOffset = (b/10)-1;
	System.out.println(b+" xO:"+xOffset);
	//remove the processed value from the byte
	b-= (10*(xOffset+1));
	System.out.println(" "+b);
	//z = b-1 (converting 0-> -1, 1 -> 0, 2 -> 1)
	int zOffset = b-1;
	System.out.println(b+" zO:"+zOffset);
	int[] targetArr= {xOffset,yOffset,zOffset};
	setTarget(targetArr);
}

@Override
public void setTarget(int[] target) {
	this.target = target;

}

@Override
public int[] getTarget() {
	return target;
}

@Override
public byte toByte() {
	byte modifier = (byte) (target[1]<0?-1:1);
	//=(100*y)+(10*(x+1))+(z+1)
	byte xRef = (byte) ((modifier*10)*(1+target[0]));
	System.out.println("Byte xRef:"+xRef);
	byte yRef = (byte) (100*target[1]);
	System.out.println("Byte yRef:"+yRef);
	byte zRef =  (byte)(modifier*(1+target[2]));
	System.out.println("Byte zRef:"+zRef);
	byte result = (byte) (zRef+xRef+yRef);
	return result;
}

@Override
public String toJSON() {
	String result = "\n{";
	result+=("\n\t\"targetX\":\""+target[0]+"\",");
	result+=("\n\t\"targetY\":\""+target[1]+"\",");
	result+=("\n\t\"targetZ\":\""+target[2]+"\"");
	result+="\n}\n";
	return result;
}

}

 

Fixed TileEntity (now correctly checks the surrounding 26 blocks for connectable Tiles):

package net.RPower.RPowermod.machines.power.cable;

import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

import RPower.api.power.E_MFPacketType;
import RPower.api.power.I_MFSink;
import RPower.api.power.MFHelper;
import RPower.api.power.MFPacket;
import RPower.api.power.cable.I_MFCable;
import RPower.api.power.cable.I_PipeDirection;
import net.RPower.RPowermod.core.RPCore;
import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;

public class TileEntityFluxCable extends TileEntity implements I_MFCable {
//Connections are an array of [up, Down, North, East, West, South]
public List<I_PipeDirection> connections;

//whether or not the cable is lossy
public boolean insulatedCable;

//maximum limit the cable can carry
public double packetSizeLimit;

//Packets awaiting processing
public Queue<MFPacket> internalBuffer;

//automatically calculated.
public double percentageLoss;

//transfer mode, unbridged connections can only cross an intersection in straight lines (may be reserved for advanced cabling)
public boolean bridgeConnections;

public TileEntityFluxCable()
{
	this(32);
}

public TileEntityFluxCable(double packetSize)
{
	this(packetSize,false);
}

public TileEntityFluxCable(double packetSize, boolean insulated)
{
	this(packetSize,insulated,true);
}
public TileEntityFluxCable(double packetSize, boolean insulated,boolean bridged)
{
	packetSizeLimit= packetSize;
	insulatedCable=insulated;
	bridgeConnections=bridged;
	connections=new LinkedList<I_PipeDirection>();
	internalBuffer=new LinkedList<MFPacket>();
	checkLoss(insulated);
}

private void checkLoss(boolean insulated) {
	if(!insulated)
	{
		percentageLoss=(packetSizeLimit/MFPacket.POWERLIMIT);
	}
}

@Override
public boolean takePacket(MFPacket packet)
{
	double excess=0;
	if(!insulatedCable)
	{

		excess+=(percentageLoss*packet.getBuffer());
		packet.setBuffer(packet.getBuffer()-excess);
	}
	if(packet.getBuffer()>packetSizeLimit)
	{
		excess += packet.getBuffer()-packetSizeLimit;
		packet.setBuffer(packetSizeLimit);
	}
	powerBleed(excess);

	boolean result=false;
	result=internalBuffer.add(packet);
	return result;
}

@Override
public void writeToNBT(NBTTagCompound nbtTag) {
	byte[] connectionsArr = new byte[connections.size()];
	int i =0;
	for (I_PipeDirection connection: connections) {
		connectionsArr[i] = connection.toByte();
		i++;
	}
	nbtTag.setByteArray("connections", connectionsArr);
	nbtTag.setBoolean("insulated", insulatedCable);
	nbtTag.setBoolean("bridged", bridgeConnections);

	nbtTag.setDouble("packetLimit", packetSizeLimit);

	super.writeToNBT(nbtTag);
};

@Override
public void readFromNBT(NBTTagCompound nbtTag) {
	byte[] connectionsArr = nbtTag.getByteArray("connections");
	for (byte b : connectionsArr) {
		I_PipeDirection temp = new PipeDirection(b);
		connections.add(temp);
	}

	insulatedCable=nbtTag.getBoolean("insulated");

	bridgeConnections=nbtTag.getBoolean("bridged");

	packetSizeLimit=nbtTag.getDouble("packetLimit");

	checkLoss(insulatedCable);

	super.readFromNBT(nbtTag);
}

@Override
public Packet getDescriptionPacket() {
	NBTTagCompound nbtTag = new NBTTagCompound();
	this.writeToNBT(nbtTag);
	//TODO: Get this damn working!
	return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbtTag);
}

@Override
public void onDataPacket(NetworkManager networkManager, S35PacketUpdateTileEntity packet) {
	readFromNBT(packet.func_148857_g());
}

@Override
public void updateEntity() {
	if(!internalBuffer.isEmpty())
	{
		MFPacket packet = internalBuffer.remove();
		boolean result=false;
		byte  direction;
		for(int i=0; i<59;i++)
		{
			int posNeg = ((int)(Math.random()*%2==0)?1:-1;
			double randXvel=Math.random()*(2*posNeg);
			double randYvel=Math.random()*(2*posNeg);
			double randZvel=Math.random()*(2*posNeg);
			this.worldObj.spawnParticle("magicCrit", xCoord, yCoord, zCoord, randXvel, randYvel, randZvel);
		}

		switch(packet.getType())
		{
		case RESPOND:
			direction = packet.getOrigin().peek();
			result = (direction!=-1);
			result = pushPacket(packet);
			break;
		default:
			direction = packet.getOrigin().peek();
			packet.getOrigin().add(randDir(direction).toByte());
			result=pushPacket(packet);
			break;
		}
	}
	super.updateEntity();
}

private I_PipeDirection randDir(byte initDirection) {
	int randNum=(int)(Math.random()*connections.size());
	return connections.get(randNum);
}


public boolean checkConnections()
{
	boolean result=false;
	int x,y,z,i=0;
	for(y=-1;y<2;y++)
	{
		System.out.println("Y Level: "+y);
		for(x=-1;x<2;x++)
		{
			System.out.println("X Position: "+x);
			for(z=-1;z<2;z++)
			{
				System.out.println("Z Position: "+z);
				i++;
				Block target = worldObj.getBlock(xCoord+x, yCoord+y, zCoord+z);
				System.out.print("Test["+i+"] Checking block at ["+(xCoord+x)+","+(yCoord+y)+","+(zCoord+z)+"]");
				if(target.hasTileEntity(target.getDamageValue(worldObj, xCoord+x, yCoord+y, zCoord+z))&&MFHelper.checkConnectable(worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z)))
				{
						System.out.print(" - Valid!");
						boolean twoWay = (worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))instanceof I_MFCable;
						formConnection(twoWay, x,y,z);

				}
				System.out.print('\n');
			}
		}
		System.out.println("=================================================================");
	}


	return result;
}

@Override
public void formConnection(boolean twoWay, int x, int y, int z) {
	if(!(x==0&&y==0&&z==0))
	{
		connections.add(new PipeDirection(x, y, z));
		if (twoWay)
		{
			((I_MFCable)(worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))).formConnection(false, -x, -y, -z);

			worldObj.markBlockForUpdate(xCoord+x, yCoord+y, zCoord+z);
		}
		System.out.println("connection formed");
	}
}

@Override
public void breakConnection(I_PipeDirection direction) {
	//		if ((worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))instanceof I_MFCable)
	//			((I_MFCable)(worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))).formConnection(false, -x, -y, -z);
	//		System.out.println("connection removed");
	//		connections.remove(direction);
}

@Override
public boolean pushPacket(MFPacket packet)
{

	byte direction = packet.getOrigin().peek();
	if(packet.getType()==E_MFPacketType.RESPOND)
		packet.getOrigin().pop();

	boolean result= false;
	int[]origin = {xCoord,yCoord,zCoord};
	int[] target = new PipeDirection(direction).getTarget();
	for(int i=0;i<3;i++)
	{
		target[i]+=origin[i];
	}
	result = this.worldObj.getBlock(target[0], target[1], target[2]).hasTileEntity(0);
	if(result)
		result=this.worldObj.getTileEntity(target[0], target[1], target[2])instanceof I_MFSink;
	if(result)
		result=((I_MFSink)this.worldObj.getTileEntity(target[0], target[1], target[2])).takePacket(packet);
	if(!result)
		powerBleed(packet.getBuffer());
	return result;
}

@Override
public boolean canUpdate()
{
	return true;
}

@Override
public double flowLimit() {
	return packetSizeLimit;
}

@Override
public void powerBleed(double excess) {
	//add power bleed to chunk atmosphere -> own effects + taint if Thaumcraft installed
	if(excess>0)
		System.err.println(""+excess+" MF bled off into atmosphere!\n");

}

@Override
public double getPacketLimit() {
	return packetSizeLimit;
}

@Override
public boolean isInsulated() {
	return insulatedCable;
}

@Override
public boolean isBridged() {
	return bridgeConnections;
}

@Override
public boolean canDeBridge() {
	return insulatedCable;
}

@Override
public List<I_PipeDirection> getConnections() {
	return connections;
}

public String toJSON() {
	String result = "\n{";
	result+=("\n\t\"tileX\":\""+xCoord+"\",");
	result+=("\n\t\"tileY\":\""+yCoord+"\",");
	result+=("\n\t\"tileZ\":\""+zCoord+"\",");
	result+=("\n\t\"connections\":[\n");
	for (I_PipeDirection pipe : connections) {
		result+=(pipe.toJSON()+",\n");
	}
	result+="]";
	result+="\n}\n";

	return result;
}

}

 

Fixed Renderer:

package net.RPower.RPowermod.renderers.block;

import org.lwjgl.opengl.GL11;

import RPower.api.power.cable.I_PipeDirection;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.RPower.RPowermod.machines.power.cable.TileEntityFluxCable;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.client.shader.TesselatorVertexState;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;

/**
* 
* @author Minothor, Flenix
*Renders the card Decks in the world
*Adapted from Flenix's Tutorial at:
*http://www.minecraftforge.net/wiki/Rendering_a_Techne_Model_as_a_Block
*/

//TODO: Cancel rendering if not visible
//Current Idea: Player.yaw/pitch trigonometry && sky light
public class TileEntityFluxCableRenderer extends TileEntitySpecialRenderer {
private final ResourceLocation texture;
public static int blockRenderId;
public static final float pixel = 1.0F/16; 
public Tessellator tessellator;

public TileEntityFluxCableRenderer() {
	tessellator = Tessellator.instance;
	blockRenderId = RenderingRegistry.getNextAvailableRenderId();
	texture = new ResourceLocation(net.RPower.RPowermod.core.RPCore.modid+":textures/blocks/fluxCable.png");

}



@Override
public void renderTileEntityAt(TileEntity entity, double x, double y, double z, float scale) {
	//binding the textures
        Minecraft.getMinecraft().renderEngine.bindTexture(texture);
	GL11.glPushMatrix();
	//initial location (what's up with the 0.5 and 1.5 difference I wonder)
	GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F);
	GL11.glDisable(GL11.GL_CULL_FACE);
	drawHub();

         //let LWGL know we're doing more matixy manipulation stuff
         
         //rotate to avoid model rendering upside down
         for (I_PipeDirection connection : ((TileEntityFluxCable)entity).connections) {
        	 int[] target = connection.getTarget();
        	 float[] angles = {0,0,0};
        	 float yMod = (target[0]==0&&target[2]==0)?90F:45F;
        	 
        	 
        	 float xMod=0;
        	 float xDir=0;
        	 
        	 float zDir=0;
        	 float zMod=0;
        	 if(target[1]==0)
        		 xMod=-90F;
        	 if(target[0]==0)
        	 {
        		xDir=target[2];
        		xMod=-90F;
        		
        		
        	 }
        	 if(target[2]==0)
        	 {
        		xDir=target[0];
        		xMod=180F;
        		if(xDir>0)
        		{
        			xMod=0F;
        			
        		}
        	 }
        	 if(target[0]!=0&&target[2]!=0)
        	 {
        		 if(target[2]>0)
        		 {
        			 xDir=1;
        			 xMod=-135;
        			 if(target[0]>0)
        			 {
        				 xDir*=-1;
        				 xMod=45F;
        				 yMod-=10;
        				 
        			 }
        		 } else if(target[0]<0)
    			 {
    				 zDir=1;
    				 xDir=-1;
    				 zMod=360F;
    				 xMod=225F;
    				 yMod-=10;
    			 } else if(target[0]>0)
			 {
    				 if(target[2]<0)
    				 {
    					 xDir=1;
    					 xMod=45;
    					 yMod-=10;
    				 }
			 }
        		 if(target[0]<0&&target[2]>0)
        		 {
        			 if(target[1]<0)
        			 yMod=35F;
        			 if(target[1]>0)
        				 yMod=35F;
        		 }
        		 
        	 }
        	 
        	 angles[0]=zDir*zMod;
        	 angles[1]=xDir*xMod;
    		 angles[2]=target[1]*yMod;
    		 
        	 
        	 
		drawConnector(angles);
	}
        
         //pop both sections off the render stack
         
         GL11.glPopMatrix();
         //System.out.println("FOV : "+Minecraft.getMinecraft().gameSettings.fovSetting);
         GL11.glEnable(GL11.GL_CULL_FACE);
}
 private void drawHub() {

	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(90, 1, 0, 0); //90x
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(90, 1, 0, 0); //180x
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(90, 1, 0, 0); //270x
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(90, 1, 0, 0);
	GL11.glRotatef(90, 0, 1, 0); 
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(180, 0, 1, 0); 
	tessellator.startDrawingQuads();
	tessellator.addVertexWithUV(2*pixel, 2*pixel, 2*pixel, 4*pixel,1);
	tessellator.addVertexWithUV(-2*pixel, 2*pixel, 2*pixel, 0,1);
	tessellator.addVertexWithUV(-2*pixel, -2*pixel, 2*pixel, 0,12*pixel);
	tessellator.addVertexWithUV(2*pixel, -2*pixel, 2*pixel, 4*pixel,12*pixel);
	tessellator.draw();
	GL11.glRotatef(90, 0, 1, 0);

}

 private void drawRails(int size)
 {

	 GL11.glPushMatrix();
	 GL11.glRotatef(45, 1, 0, 0);
	 Tessellator tessellator = Tessellator.instance;
	 drawRail(size, tessellator);
	 GL11.glRotatef(90, 1, 0, 0);
	 drawRail(size, tessellator);
	 GL11.glRotatef(90, 1, 0, 0);
	 drawRail(size, tessellator);
	 GL11.glRotatef(90, 1, 0, 0);
	 drawRail(size, tessellator);
	 GL11.glRotatef(90, 1, 0, 0);
	 GL11.glRotatef(-45, 1, 0, 0);
	 GL11.glPopMatrix();
 }



private void drawRail(int size, Tessellator tessellator) {
	float offset=27.4F;
	GL11.glRotatef(45F-offset, 1, 0, 0);
	GL11.glRotatef(-offset, 1, 0, 0);
	tessellator.startDrawingQuads();
	 tessellator.addVertexWithUV(0, 0.5*pixel, -2*pixel, size*pixel, 1*pixel);
	 tessellator.addVertexWithUV(size*pixel, 0.5*pixel, -2*pixel, 0*pixel, 0*pixel);
	 tessellator.addVertexWithUV(size*pixel, -0.5*pixel, -2*pixel, 0*pixel, 0*pixel);
	 tessellator.addVertexWithUV(0, -0.5*pixel, -2*pixel, size*pixel, 1*pixel);
	 tessellator.draw();
	 GL11.glRotatef(offset, 1, 0, 0);
	 tessellator.startDrawingQuads();
	 tessellator.addVertexWithUV(0, 0.5*pixel, -2*pixel, size*pixel, 2*pixel);
	 tessellator.addVertexWithUV(size*pixel, 0.5*pixel, -2*pixel, 0*pixel, 1*pixel);
	 tessellator.addVertexWithUV(size*pixel, -0.5*pixel, -2*pixel, 0*pixel, 1*pixel);
	 tessellator.addVertexWithUV(0, -0.5*pixel, -2*pixel, size*pixel, 2*pixel);
	 tessellator.draw();
	 GL11.glRotatef(-45F+offset, 1, 0, 0);
}

 private void drawCore(int size)
 {
	 GL11.glPushMatrix();


	 tessellator.startDrawingQuads();
	 tessellator.addVertexWithUV(0, 1*pixel, 0, size*pixel, 8*pixel);
	 tessellator.addVertexWithUV(size*pixel, 1*pixel, 0, 0*pixel, 8*pixel);
	 tessellator.addVertexWithUV(size*pixel, -1*pixel, 0, 0*pixel, 6*pixel);
	 tessellator.addVertexWithUV(0, -1*pixel, 0, size*pixel, 6*pixel);
	 tessellator.draw();
	 GL11.glRotatef(90, 1, 0, 0);
	 tessellator.startDrawingQuads();
	 tessellator.addVertexWithUV(0, 1*pixel, 0, size*pixel, 8*pixel);
	 tessellator.addVertexWithUV(size*pixel, 1*pixel, 0, 0*pixel, 8*pixel);
	 tessellator.addVertexWithUV(size*pixel, -1*pixel, 0, 0*pixel, 6*pixel);
	 tessellator.addVertexWithUV(0, -1*pixel, 0, size*pixel, 6*pixel);
	 tessellator.draw();
	 GL11.glRotatef(90, -1, 0, 0);
	 GL11.glPopMatrix();
 }



private void drawConnector(float[] angle) {
	int size = 8;
	if((angle[1]!=90)||(angle[1]!=90))
		size+=3;
	if(((angle[0]!=90)||(angle[2]!=90))&&((angle[0]!=-90)||(angle[2]!=-90)))
		size+=3;

	GL11.glRotatef(angle[0], 1, 0, 0);
	GL11.glRotatef(angle[1], 0, 1, 0);
	GL11.glRotatef(angle[2], 0, 0, 1);

	 drawCore(size);
	 drawRails(size);

	 GL11.glRotatef(-angle[2], 0, 0, 1);
	 GL11.glRotatef(-angle[1], 0, 1, 0);
	 GL11.glRotatef(-angle[0], 1, 0, 0);
}



private void adjustLightFixture(World world, int x, int y, int z, Block block) {
         
         float brightness = block.getLightValue(world, x, y, z);
         int skyLight = world.getLightBrightnessForSkyBlocks(x, y, z, 0);
         int modulousModifier = skyLight % 65536;
         int divModifier = skyLight / 65536;
         tessellator.setColorOpaque_F(brightness, brightness, brightness);
         OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit,  modulousModifier,  divModifier);
}

}

Posted

hitting a new bug now I'm afraid, remotely calling the breakConnection() function on adjacent pipes sometimes leaves open ended connections towards the removed pipe.

 

package net.RPower.RPowermod.machines.power.cable;

import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

import RPower.api.power.E_MFPacketType;
import RPower.api.power.I_MFSink;
import RPower.api.power.MFHelper;
import RPower.api.power.MFPacket;
import RPower.api.power.cable.I_MFCable;
import RPower.api.power.cable.I_PipeDirection;
import net.RPower.RPowermod.core.RPCore;
import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;

public class TileEntityFluxCable extends TileEntity implements I_MFCable {
//Connections are an array of [up, Down, North, East, West, South]
public List<I_PipeDirection> connections;

//whether or not the cable is lossy
public boolean insulatedCable;

//maximum limit the cable can carry
public double packetSizeLimit;

//Packets awaiting processing
public Queue<MFPacket> internalBuffer;

//automatically calculated.
public double percentageLoss;

//transfer mode, unbridged connections can only cross an intersection in straight lines (may be reserved for advanced cabling)
public boolean bridgeConnections;

private double distLimit;

public TileEntityFluxCable()
{
	this(32);
}

public TileEntityFluxCable(double packetSize)
{
	this(packetSize,false);
}

public TileEntityFluxCable(double packetSize, boolean insulated)
{
	this(packetSize,insulated,true);
}
public TileEntityFluxCable(double packetSize, boolean insulated,boolean bridged)
{
	packetSizeLimit= packetSize;
	insulatedCable=insulated;
	bridgeConnections=bridged;
	connections=new LinkedList<I_PipeDirection>();
	internalBuffer=new LinkedList<MFPacket>();
	checkLoss(insulated);
	distLimit = insulatedCable?(4*packetSize):packetSize;
}

private void checkLoss(boolean insulated) {
	if(!insulated)
	{
		percentageLoss=(packetSizeLimit/MFPacket.POWERLIMIT);
	}
}

@Override
public boolean takePacket(MFPacket packet)
{
	double excess=0;
	if(!insulatedCable)
	{

		excess+=(percentageLoss*packet.getBuffer());
		packet.setBuffer(packet.getBuffer()-excess);
	}
	if(packet.getBuffer()>packetSizeLimit)
	{
		excess += packet.getBuffer()-packetSizeLimit;
		packet.setBuffer(packetSizeLimit);
	}
	powerBleed(excess);

	boolean result=false;
	result=internalBuffer.add(packet);
	return result;
}

@Override
public void writeToNBT(NBTTagCompound nbtTag) {
	byte[] connectionsArr = new byte[connections.size()];
	int i =0;
	for (I_PipeDirection connection: connections) {
		connectionsArr[i] = connection.toByte();
		i++;
	}
	nbtTag.setByteArray("connections", connectionsArr);
	nbtTag.setBoolean("insulated", insulatedCable);
	nbtTag.setBoolean("bridged", bridgeConnections);

	nbtTag.setDouble("packetLimit", packetSizeLimit);

	super.writeToNBT(nbtTag);
};

@Override
public void readFromNBT(NBTTagCompound nbtTag) {
	byte[] connectionsArr = nbtTag.getByteArray("connections");
	for (byte b : connectionsArr) {
		I_PipeDirection temp = new PipeDirection(b);
		connections.add(temp);
	}

	insulatedCable=nbtTag.getBoolean("insulated");

	bridgeConnections=nbtTag.getBoolean("bridged");

	packetSizeLimit=nbtTag.getDouble("packetLimit");

	checkLoss(insulatedCable);

	super.readFromNBT(nbtTag);
}

@Override
public Packet getDescriptionPacket() {
	NBTTagCompound nbtTag = new NBTTagCompound();
	this.writeToNBT(nbtTag);
	//TODO: Get this damn working!
	return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbtTag);
}

@Override
public void onDataPacket(NetworkManager networkManager, S35PacketUpdateTileEntity packet) {
	readFromNBT(packet.func_148857_g());
}

@Override
public void updateEntity() {
	if(!internalBuffer.isEmpty())
	{
		MFPacket packet = internalBuffer.remove();
		boolean result=false;
		byte  direction;
		for(int i=0; i<59;i++)
		{
			int posNeg = ((int)(Math.random()*%2==0)?1:-1;
			double randXvel=Math.random()*(2*posNeg);
			double randYvel=Math.random()*(2*posNeg);
			double randZvel=Math.random()*(2*posNeg);
			this.worldObj.spawnParticle("magicCrit", xCoord, yCoord, zCoord, randXvel, randYvel, randZvel);
		}

		switch(packet.getType())
		{
		case RESPOND:
			direction = packet.getOrigin().peek();
			result = (direction!=-1);
			result = pushPacket(packet);
			break;
		default:
			direction = packet.getOrigin().peek();
			packet.getOrigin().add(randDir(direction).toByte());
			result=pushPacket(packet);
			break;
		}
	}
	super.updateEntity();
}

private I_PipeDirection randDir(byte initDirection) {
	I_PipeDirection origin = new PipeDirection(initDirection);
	origin.invert();
	I_PipeDirection newDirection = origin;
	int attempt = 0;
	while (!connections.isEmpty()&&attempt<26&&newDirection.equals(origin))
	{
		attempt++;
		int randNum=(int)(Math.random()*connections.size());
		newDirection  = connections.get(randNum);
	}
	return newDirection;
}


public boolean checkConnections()
{
	boolean result=false;
	int x,y,z,i=0;
	for(y=-1;y<2;y++)
	{
		//System.out.println("Y Level: "+y);
		for(x=-1;x<2;x++)
		{
			//System.out.println("X Position: "+x);
			for(z=-1;z<2;z++)
			{
				//System.out.println("Z Position: "+z);
				i++;
				Block target = worldObj.getBlock(xCoord+x, yCoord+y, zCoord+z);
				//System.out.print("Test["+i+"] Checking block at ["+(xCoord+x)+","+(yCoord+y)+","+(zCoord+z)+"]");
				if(target.hasTileEntity(target.getDamageValue(worldObj, xCoord+x, yCoord+y, zCoord+z))&&MFHelper.checkConnectable(worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z)))
				{
						//System.out.print(" - Valid!");
						boolean twoWay = (worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))instanceof I_MFCable;
						formConnection(twoWay, x,y,z);

				}
				//System.out.print('\n');
			}
		}
		//System.out.println("=================================================================");
	}


	return result;
}

@Override
public void formConnection(boolean twoWay, int x, int y, int z) {
	if(!(x==0&&y==0&&z==0))
	{
		connections.add(new PipeDirection(x, y, z));
		if (twoWay)
		{
			((I_MFCable)(worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))).formConnection(false, -x, -y, -z);

			worldObj.markBlockForUpdate(xCoord+x, yCoord+y, zCoord+z);
		}
		//System.out.println("connection formed");
		worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
	}
}

@Override
public void breakConnection(boolean twoWay, int x, int y, int z) {
	if (twoWay&&(worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z))instanceof I_MFCable)
	{
	I_MFCable targetTile = (I_MFCable)worldObj.getTileEntity(xCoord+x, yCoord+y, zCoord+z);
	targetTile.breakConnection(false,-x, -y, -z);
	worldObj.markBlockForUpdate(xCoord+x, yCoord+y, zCoord+z);
	}
	connections.remove(new PipeDirection(x,y,z));
	worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}

@Override
public boolean pushPacket(MFPacket packet)
{
	boolean result= false;
	if(packet.getType()==E_MFPacketType.RESPOND&&packet.getBuffer()<=0)
	{
		packet=null;
	}
	if(packet!=null&&packet.getOrigin().size()<=distLimit);
	{

	byte direction = packet.getOrigin().peek();
	if(packet.getType()==E_MFPacketType.RESPOND)
		packet.getOrigin().pop();


	int[]origin = {xCoord,yCoord,zCoord};
	int[] target = new PipeDirection(direction).getTarget();
	for(int i=0;i<3;i++)
	{
		target[i]+=origin[i];
	}
	result = this.worldObj.getBlock(target[0], target[1], target[2]).hasTileEntity(0);
	if(result)
		result=this.worldObj.getTileEntity(target[0], target[1], target[2])instanceof I_MFSink;
	if(result)
		result=((I_MFSink)this.worldObj.getTileEntity(target[0], target[1], target[2])).takePacket(packet);
	if(!result)
		powerBleed(packet.getBuffer());
	}
	return result;
}

@Override
public boolean canUpdate()
{
	return true;
}

@Override
public double flowLimit() {
	return packetSizeLimit;
}

@Override
public void powerBleed(double excess) {
	//add power bleed to chunk atmosphere -> own effects + taint if Thaumcraft installed
	if(excess>0)
		System.err.println(""+excess+" MF bled off into atmosphere!\n");

}

@Override
public double getPacketLimit() {
	return packetSizeLimit;
}

@Override
public boolean isInsulated() {
	return insulatedCable;
}

@Override
public boolean isBridged() {
	return bridgeConnections;
}

@Override
public boolean canDeBridge() {
	return insulatedCable;
}

@Override
public List<I_PipeDirection> getConnections() {
	return connections;
}

public String toJSON() {
	String result = "\n{";
	result+=("\n\t\"tileX\":\""+xCoord+"\",");
	result+=("\n\t\"tileY\":\""+yCoord+"\",");
	result+=("\n\t\"tileZ\":\""+zCoord+"\",");
	result+=("\n\t\"connections\":[\n");
	for (I_PipeDirection pipe : connections) {
		result+=(pipe.toJSON()+",\n");
	}
	result+="]";
	result+="\n}\n";

	return result;
}

@Override
public void breakAllConnections() {
	for (I_PipeDirection direction : connections) {
		int[] target = direction.getTarget();
		breakConnection(true, target[0], target[1], target[2]);
	}

}

}

 

package RPower.api.power.cable;

import net.RPower.RPowermod.machines.power.cable.PipeDirection;

public abstract class A_PipeDirection implements I_PipeDirection {

protected int[] target = {0,0,0};

public A_PipeDirection(int xOffset, int yOffset, int zOffset) {
	int[] targetArr= {xOffset,yOffset,zOffset};
	setTarget(targetArr);
}

//TODO: Solve why connections of Y= 1, X&Z=0 evaluate to -89 instead of 111.

public A_PipeDirection(byte b) {
	//System.out.println("["+b+"]");
	//y = b/100 (nearest whole)
	int yOffset = (byte)b/100;
	//System.out.println(b+" yO:"+yOffset);

	//remove the processed value from the byte
	b-=(100*yOffset);
	//System.out.println(" "+b);
	if(b<0)
		b*=-1;
	//x = (b/10)-1 (again, nearest whole and convert 0-> -1, 1 -> 0, 2 -> 1)
	int xOffset = (b/10)-1;
	//System.out.println(b+" xO:"+xOffset);
	//remove the processed value from the byte
	b-= (10*(xOffset+1));
	//System.out.println(" "+b);
	//z = b-1 (converting 0-> -1, 1 -> 0, 2 -> 1)
	int zOffset = b-1;
	//System.out.println(b+" zO:"+zOffset);
	int[] targetArr= {xOffset,yOffset,zOffset};
	setTarget(targetArr);
}

@Override
public void setTarget(int[] target) {
	this.target = target;

}

@Override
public int[] getTarget() {
	return target;
}

@Override
public byte toByte() {
	byte modifier = (byte) (target[1]<0?-1:1);
	//=(100*y)+(10*(x+1))+(z+1)
	byte xRef = (byte) ((modifier*10)*(1+target[0]));
	//System.out.println("Byte xRef:"+xRef);
	byte yRef = (byte) (100*target[1]);
	//System.out.println("Byte yRef:"+yRef);
	byte zRef =  (byte)(modifier*(1+target[2]));
	//System.out.println("Byte zRef:"+zRef);
	byte result = (byte) (zRef+xRef+yRef);
	return result;
}

@Override
public String toJSON() {
	String result = "\n{";
	result+=("\n\t\"targetX\":\""+target[0]+"\",");
	result+=("\n\t\"targetY\":\""+target[1]+"\",");
	result+=("\n\t\"targetZ\":\""+target[2]+"\"");
	result+="\n}\n";
	return result;
}

@Override
public void invert() {
	int[] newTarget = {-target[0],-target[1],-target[2]};
	target = newTarget;
}

@Override
public boolean equals(Object obj) {
	if (obj==null||!(obj instanceof I_PipeDirection))
		return false;
	return ((I_PipeDirection)obj).toByte()==this.toByte();
}
}

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • are you using Optifine? if so it is not supported with the supplementaries mod and it can cause crashes easily.
    • hey, a bit late to the forum. im new to mc modding and i dont really know what a supplier is, would be grateful if you shared a bit of info.
    • Yeah, it still crashes, so if you'd like to compare mod lists then that would probably help.
    • I'm having the same issue. I'm still in the process of troubleshooting, but currently I'm not having the issue. I had just updated FramedBlocks, XaeroPlus, Puzzles Lib [Forge & Fabric], Structure Essentials, and Server Performance - Smooth Chunk Save. After booting it up, I had the issue, I closed and reopened it, and then I got an error about FTBRanks (which had happened before). It basically said it required a more up to date version of Forge, but I had just updated forge before updating all the other mods, so FTBRanks should have given the error when I booted it up before. Currently, the game is running fine and my screen hasn't frozen and flashed. I'll update this if more information comes up.
    • ---- Minecraft Crash Report ---- // Shall we play a game? Time: 2025-03-12 17:35:49 Description: mouseClicked event handler java.lang.IllegalStateException: Failed to load registries due to above errors     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.load(RegistryDataLoader.java:154) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.mixinextras$bridge$load$34(RegistryDataLoader.java) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.wrapOperation$cjo000$fabric_resource_conditions_api_v1$captureRegistries(RegistryDataLoader.java:555) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.mixinextras$bridge$wrapOperation$cjo000$fabric_resource_conditions_api_v1$captureRegistries$35(RegistryDataLoader.java) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.wrapOperation$cml000$fabric_registry_sync_v0$wrapIsServerCall(RegistryDataLoader.java:1052) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.load(RegistryDataLoader.java:118) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.server.WorldLoader.loadLayer(WorldLoader.java:76) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.server.WorldLoader.loadAndReplaceLayer(WorldLoader.java:82) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.server.WorldLoader.load(WorldLoader.java:35) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.worldselection.CreateWorldScreen.openFresh(CreateWorldScreen.java:123) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.CreateWorldScreenMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:bugfix.extra_experimental_screen.CreateWorldScreenMixin from mod modernfix,pl:mixin:APP:cumulus_menus.mixins.json:client.CreateWorldScreenMixin from mod cumulus_menus,pl:mixin:APP:fabric-resource-loader-v0.client.mixins.json:CreateWorldScreenMixin from mod fabric_resource_loader_v0,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.worldselection.WorldSelectionList.loadLevels(WorldSelectionList.java:192) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.worldselection.WorldSelectionList.<init>(WorldSelectionList.java:111) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.worldselection.SelectWorldScreen.init(SelectWorldScreen.java:51) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.Screen.init(Screen.java:317) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-screen-api-v1.mixins.json:ScreenMixin from mod fabric_screen_api_v1,pl:mixin:APP:balm.neoforge.mixins.json:ScreenAccessor from mod balm,pl:mixin:APP:fabric-screen-api-v1.mixins.json:ScreenAccessor from mod fabric_screen_api_v1,pl:mixin:APP:immersiveui-common.mixins.json:ScreenMixin from mod immersiveui,pl:mixin:APP:mixins.cobblemon-neoforge.json:ScreenMixin from mod cobblemon,pl:mixin:APP:yungsmenutweaks.mixins.json:ScreenMixin from mod yungsmenutweaks,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.ScreenAccessor from mod cumulus_menus,pl:mixin:APP:ponder.mixins.json:client.accessor.ScreenAccessor from mod ponder,pl:mixin:APP:cold_sweat.mixin.json:MixinChatClicked from mod cold_sweat,pl:mixin:APP:aether.mixins.json:client.accessor.ScreenAccessor from mod aether,pl:mixin:APP:relics.mixins.json:ScreenMixin from mod relics,pl:mixin:APP:patchouli_xplat.mixins.json:client.AccessorScreen from mod patchouli,pl:mixin:APP:owo.mixins.json:ScreenAccessor from mod owo,pl:mixin:APP:owo.mixins.json:ui.ScreenMixin from mod owo,pl:mixin:APP:iceberg.mixins.json:ScreenMixin from mod iceberg,pl:mixin:APP:owo.mixins.json:ui.layers.ScreenMixin from mod owo,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.setScreen(Minecraft.java:1057) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:mixin:APP:owo.mixins.json:MinecraftClientMixin from mod owo,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:feature.measure_time.MinecraftMixin_Forge from mod modernfix,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Images from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Keybinds from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_PipelineManagement from mod iris,pl:mixin:APP:fabric-screen-api-v1.mixins.json:MinecraftClientMixin from mod fabric_screen_api_v1,pl:mixin:APP:supplementaries-common.mixins.json:MinecraftMixin from mod supplementaries,pl:mixin:APP:accessories-common.mixins.json:client.MinecraftMixin from mod accessories,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.MinecraftAccessor from mod cumulus_menus,pl:mixin:APP:aaa_particles-common.mixins.json:client.MixinMinecraft from mod aaa_particles,pl:mixin:APP:laserbridges.mixins.json:MixinMinecraft from mod laserbridges,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft from mod glitchcore,pl:mixin:APP:sodium-common.mixins.json:core.MinecraftMixin from mod sodium,pl:mixin:APP:sodium-neoforge.mixins.json:platform.neoforge.EntrypointMixin from mod sodium,pl:mixin:APP:notenoughanimations.mixins.json:LivingRenderStateMixin from mod notenoughanimations,pl:mixin:APP:flywheel.impl.mixins.json:MinecraftMixin from mod flywheel,pl:mixin:APP:ponder.mixins.json:client.WindowResizeMixin from mod ponder,pl:mixin:APP:cold_sweat.mixin.json:MixinInventoryOpenClient from mod cold_sweat,pl:mixin:APP:cold_sweat.mixin.json:MixinPickEntity from mod cold_sweat,pl:mixin:APP:notenoughcrashes.mixins.json:client.MixinMinecraftClient from mod notenoughcrashes,pl:mixin:APP:aether.mixins.json:client.accessor.MinecraftAccessor from mod aether,pl:mixin:APP:bookshelf.mixins.json:access.client.AccessorMinecraft from mod bookshelf,pl:mixin:APP:carryon.mixins.json:MinecraftMixin from mod carryon,pl:mixin:APP:mixins.sodiumdynamiclights.json:MinecraftClientMixin from mod sodiumdynamiclights,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadEnd from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadStart from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:accessor.MinecraftClientAccessor from mod entity_model_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinMinecraftClient from mod entity_texture_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinResourceReload from mod entity_texture_features,pl:mixin:APP:betterthirdperson.mixins.json:MinecraftClientMixin from mod betterthirdperson,pl:mixin:APP:architectury.mixins.json:MixinMinecraft from mod architectury,pl:mixin:APP:fightorflight.mixins_common.json:MinecraftClientInject from mod fightorflight,pl:mixin:APP:fabric-networking-api-v1.client.mixins.json:accessor.MinecraftClientAccessor from mod fabric_networking_api_v1,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MinecraftMixin from mod smallships,pl:mixin:APP:l2menustacker.mixins.json:MinecraftMixin from mod l2menustacker,pl:mixin:APP:fabric-lifecycle-events-v1.client.mixins.json:MinecraftClientMixin from mod fabric_lifecycle_events_v1,pl:mixin:APP:owo.mixins.json:ui.MinecraftClientMixin from mod owo,pl:mixin:APP:utility_belt.client.mixins.json:MinecraftMixin from mod utility_belt,pl:mixin:APP:moonlight-common.mixins.json:MinecraftMixin from mod moonlight,pl:mixin:APP:iceberg.mixins.json:MinecraftMixin from mod iceberg,pl:mixin:APP:irons_spellbooks.mixins.json:MinecraftMixin from mod irons_spellbooks,pl:mixin:APP:fabric-events-interaction-v0.client.mixins.json:MinecraftClientMixin from mod fabric_events_interaction_v0,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin from mod (unknown),pl:mixin:APP:create.mixins.json:accessor.MinecraftAccessor from mod create,pl:mixin:APP:modernfix-common.mixins.json:feature.remove_telemetry.MinecraftMixin_Telemetry from mod modernfix,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.TitleScreen.lambda$createNormalMenuOptions$7(TitleScreen.java:161) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.iris.json:MixinTitleScreen from mod iris,pl:mixin:APP:cumulus_menus.mixins.json:client.TitleScreenMixin from mod cumulus_menus,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.TitleScreenAccessor from mod cumulus_menus,pl:mixin:APP:aether.mixins.json:client.accessor.TitleScreenAccessor from mod aether,pl:mixin:APP:collective_neoforge.mixins.json:TitleScreenMixin from mod collective,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.components.Button.onPress(Button.java:41) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.components.AbstractButton.onClick(AbstractButton.java:47) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:accessories-common.mixins.json:client.AbstractButtonMixin from mod accessories,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.neoforged.neoforge.client.extensions.IAbstractWidgetExtension.onClick(IAbstractWidgetExtension.java:36) ~[neoforge-21.1.133-universal.jar%23398!/:?] {re:computing_frames,re:mixin,re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.components.AbstractWidget.mouseClicked(AbstractWidget.java:144) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:yungsmenutweaks.mixins.json:AbstractWidgetMixin from mod yungsmenutweaks,pl:mixin:APP:accessories-common.mixins.json:client.owo.ComponentStubMixin from mod accessories,pl:mixin:APP:owo.mixins.json:ui.ClickableWidgetMixin from mod owo,pl:mixin:APP:owo.mixins.json:ui.access.ClickableWidgetAccessor from mod owo,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.components.events.ContainerEventHandler.mouseClicked(ContainerEventHandler.java:38) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,re:mixin,re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.TitleScreen.mouseClicked(TitleScreen.java:340) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.iris.json:MixinTitleScreen from mod iris,pl:mixin:APP:cumulus_menus.mixins.json:client.TitleScreenMixin from mod cumulus_menus,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.TitleScreenAccessor from mod cumulus_menus,pl:mixin:APP:aether.mixins.json:client.accessor.TitleScreenAccessor from mod aether,pl:mixin:APP:collective_neoforge.mixins.json:TitleScreenMixin from mod collective,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.MouseHandler.lambda$onPress$0(MouseHandler.java:98) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:betterthirdperson.mixins.json:MouseMixin from mod betterthirdperson,pl:mixin:APP:balm.neoforge.mixins.json:MouseHandlerAccessor from mod balm,pl:mixin:APP:supplementaries-common.mixins.json:MouseHandlerMixin from mod supplementaries,pl:mixin:APP:mixins.cobblemon-common.json:MouseHandlerMixin from mod cobblemon,pl:mixin:APP:relics.mixins.json:MouseHandlerMixin from mod relics,pl:mixin:APP:smallships-common.mixins.json:zooming.client.MouseHandlerMixin from mod smallships,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MouseHandlerAccessor from mod smallships,pl:mixin:APP:owo.mixins.json:ui.layers.MouseMixin from mod owo,pl:mixin:APP:create.mixins.json:accessor.MouseHandlerAccessor from mod create,pl:mixin:APP:betterthirdperson.mixins.json:MouseFixupMixin from mod betterthirdperson,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.Screen.wrapScreenError(Screen.java:451) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-screen-api-v1.mixins.json:ScreenMixin from mod fabric_screen_api_v1,pl:mixin:APP:balm.neoforge.mixins.json:ScreenAccessor from mod balm,pl:mixin:APP:fabric-screen-api-v1.mixins.json:ScreenAccessor from mod fabric_screen_api_v1,pl:mixin:APP:immersiveui-common.mixins.json:ScreenMixin from mod immersiveui,pl:mixin:APP:mixins.cobblemon-neoforge.json:ScreenMixin from mod cobblemon,pl:mixin:APP:yungsmenutweaks.mixins.json:ScreenMixin from mod yungsmenutweaks,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.ScreenAccessor from mod cumulus_menus,pl:mixin:APP:ponder.mixins.json:client.accessor.ScreenAccessor from mod ponder,pl:mixin:APP:cold_sweat.mixin.json:MixinChatClicked from mod cold_sweat,pl:mixin:APP:aether.mixins.json:client.accessor.ScreenAccessor from mod aether,pl:mixin:APP:relics.mixins.json:ScreenMixin from mod relics,pl:mixin:APP:patchouli_xplat.mixins.json:client.AccessorScreen from mod patchouli,pl:mixin:APP:owo.mixins.json:ScreenAccessor from mod owo,pl:mixin:APP:owo.mixins.json:ui.ScreenMixin from mod owo,pl:mixin:APP:iceberg.mixins.json:ScreenMixin from mod iceberg,pl:mixin:APP:owo.mixins.json:ui.layers.ScreenMixin from mod owo,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.MouseHandler.onPress(MouseHandler.java:95) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:betterthirdperson.mixins.json:MouseMixin from mod betterthirdperson,pl:mixin:APP:balm.neoforge.mixins.json:MouseHandlerAccessor from mod balm,pl:mixin:APP:supplementaries-common.mixins.json:MouseHandlerMixin from mod supplementaries,pl:mixin:APP:mixins.cobblemon-common.json:MouseHandlerMixin from mod cobblemon,pl:mixin:APP:relics.mixins.json:MouseHandlerMixin from mod relics,pl:mixin:APP:smallships-common.mixins.json:zooming.client.MouseHandlerMixin from mod smallships,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MouseHandlerAccessor from mod smallships,pl:mixin:APP:owo.mixins.json:ui.layers.MouseMixin from mod owo,pl:mixin:APP:create.mixins.json:accessor.MouseHandlerAccessor from mod create,pl:mixin:APP:betterthirdperson.mixins.json:MouseFixupMixin from mod betterthirdperson,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.MouseHandler.lambda$setup$4(MouseHandler.java:202) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:betterthirdperson.mixins.json:MouseMixin from mod betterthirdperson,pl:mixin:APP:balm.neoforge.mixins.json:MouseHandlerAccessor from mod balm,pl:mixin:APP:supplementaries-common.mixins.json:MouseHandlerMixin from mod supplementaries,pl:mixin:APP:mixins.cobblemon-common.json:MouseHandlerMixin from mod cobblemon,pl:mixin:APP:relics.mixins.json:MouseHandlerMixin from mod relics,pl:mixin:APP:smallships-common.mixins.json:zooming.client.MouseHandlerMixin from mod smallships,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MouseHandlerAccessor from mod smallships,pl:mixin:APP:owo.mixins.json:ui.layers.MouseMixin from mod owo,pl:mixin:APP:create.mixins.json:accessor.MouseHandlerAccessor from mod create,pl:mixin:APP:betterthirdperson.mixins.json:MouseFixupMixin from mod betterthirdperson,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.execute(BlockableEventLoop.java:98) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.fix_loop_spin_waiting.BlockableEventLoopMixin from mod modernfix,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.client.MouseHandler.lambda$setup$5(MouseHandler.java:202) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:betterthirdperson.mixins.json:MouseMixin from mod betterthirdperson,pl:mixin:APP:balm.neoforge.mixins.json:MouseHandlerAccessor from mod balm,pl:mixin:APP:supplementaries-common.mixins.json:MouseHandlerMixin from mod supplementaries,pl:mixin:APP:mixins.cobblemon-common.json:MouseHandlerMixin from mod cobblemon,pl:mixin:APP:relics.mixins.json:MouseHandlerMixin from mod relics,pl:mixin:APP:smallships-common.mixins.json:zooming.client.MouseHandlerMixin from mod smallships,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MouseHandlerAccessor from mod smallships,pl:mixin:APP:owo.mixins.json:ui.layers.MouseMixin from mod owo,pl:mixin:APP:create.mixins.json:accessor.MouseHandlerAccessor from mod create,pl:mixin:APP:betterthirdperson.mixins.json:MouseFixupMixin from mod betterthirdperson,pl:mixin:A,pl:runtimedistcleaner:A}     at MC-BOOTSTRAP/[email protected]+5/org.lwjgl.glfw.GLFWMouseButtonCallbackI.callback(GLFWMouseButtonCallbackI.java:43) ~[lwjgl-glfw-3.3.3.jar%23165!/:build 5] {}     at MC-BOOTSTRAP/[email protected]+5/org.lwjgl.system.JNI.invokeV(Native Method) ~[lwjgl-3.3.3.jar%23177!/:build 5] {}     at MC-BOOTSTRAP/[email protected]+5/org.lwjgl.glfw.GLFW.glfwWaitEventsTimeout(GLFW.java:3509) ~[lwjgl-glfw-3.3.3.jar%23165!/:build 5] {re:mixin}     at TRANSFORMER/[email protected]/com.mojang.blaze3d.systems.RenderSystem.limitDisplayFPS(RenderSystem.java:162) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.iris.json:MixinGlStateManager from mod iris,pl:mixin:APP:mixins.iris.json:MixinRenderSystem from mod iris,pl:mixin:APP:mixins.iris.json:statelisteners.MixinRenderSystem from mod iris,pl:mixin:APP:sodium-common.mixins.json:workarounds.event_loop.RenderSystemMixin from mod sodium,pl:mixin:APP:flywheel.backend.mixins.json:RenderSystemMixin from mod flywheel,pl:mixin:APP:ponder.mixins.json:client.accessor.RenderSystemAccessor from mod ponder,pl:mixin:APP:owo.mixins.json:ui.RenderSystemMixin from mod owo,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.runTick(Minecraft.java:1220) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:mixin:APP:owo.mixins.json:MinecraftClientMixin from mod owo,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:feature.measure_time.MinecraftMixin_Forge from mod modernfix,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Images from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Keybinds from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_PipelineManagement from mod iris,pl:mixin:APP:fabric-screen-api-v1.mixins.json:MinecraftClientMixin from mod fabric_screen_api_v1,pl:mixin:APP:supplementaries-common.mixins.json:MinecraftMixin from mod supplementaries,pl:mixin:APP:accessories-common.mixins.json:client.MinecraftMixin from mod accessories,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.MinecraftAccessor from mod cumulus_menus,pl:mixin:APP:aaa_particles-common.mixins.json:client.MixinMinecraft from mod aaa_particles,pl:mixin:APP:laserbridges.mixins.json:MixinMinecraft from mod laserbridges,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft from mod glitchcore,pl:mixin:APP:sodium-common.mixins.json:core.MinecraftMixin from mod sodium,pl:mixin:APP:sodium-neoforge.mixins.json:platform.neoforge.EntrypointMixin from mod sodium,pl:mixin:APP:notenoughanimations.mixins.json:LivingRenderStateMixin from mod notenoughanimations,pl:mixin:APP:flywheel.impl.mixins.json:MinecraftMixin from mod flywheel,pl:mixin:APP:ponder.mixins.json:client.WindowResizeMixin from mod ponder,pl:mixin:APP:cold_sweat.mixin.json:MixinInventoryOpenClient from mod cold_sweat,pl:mixin:APP:cold_sweat.mixin.json:MixinPickEntity from mod cold_sweat,pl:mixin:APP:notenoughcrashes.mixins.json:client.MixinMinecraftClient from mod notenoughcrashes,pl:mixin:APP:aether.mixins.json:client.accessor.MinecraftAccessor from mod aether,pl:mixin:APP:bookshelf.mixins.json:access.client.AccessorMinecraft from mod bookshelf,pl:mixin:APP:carryon.mixins.json:MinecraftMixin from mod carryon,pl:mixin:APP:mixins.sodiumdynamiclights.json:MinecraftClientMixin from mod sodiumdynamiclights,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadEnd from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadStart from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:accessor.MinecraftClientAccessor from mod entity_model_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinMinecraftClient from mod entity_texture_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinResourceReload from mod entity_texture_features,pl:mixin:APP:betterthirdperson.mixins.json:MinecraftClientMixin from mod betterthirdperson,pl:mixin:APP:architectury.mixins.json:MixinMinecraft from mod architectury,pl:mixin:APP:fightorflight.mixins_common.json:MinecraftClientInject from mod fightorflight,pl:mixin:APP:fabric-networking-api-v1.client.mixins.json:accessor.MinecraftClientAccessor from mod fabric_networking_api_v1,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MinecraftMixin from mod smallships,pl:mixin:APP:l2menustacker.mixins.json:MinecraftMixin from mod l2menustacker,pl:mixin:APP:fabric-lifecycle-events-v1.client.mixins.json:MinecraftClientMixin from mod fabric_lifecycle_events_v1,pl:mixin:APP:owo.mixins.json:ui.MinecraftClientMixin from mod owo,pl:mixin:APP:utility_belt.client.mixins.json:MinecraftMixin from mod utility_belt,pl:mixin:APP:moonlight-common.mixins.json:MinecraftMixin from mod moonlight,pl:mixin:APP:iceberg.mixins.json:MinecraftMixin from mod iceberg,pl:mixin:APP:irons_spellbooks.mixins.json:MinecraftMixin from mod irons_spellbooks,pl:mixin:APP:fabric-events-interaction-v0.client.mixins.json:MinecraftClientMixin from mod fabric_events_interaction_v0,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin from mod (unknown),pl:mixin:APP:create.mixins.json:accessor.MinecraftAccessor from mod create,pl:mixin:APP:modernfix-common.mixins.json:feature.remove_telemetry.MinecraftMixin_Telemetry from mod modernfix,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.run(Minecraft.java:807) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:mixin:APP:owo.mixins.json:MinecraftClientMixin from mod owo,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:feature.measure_time.MinecraftMixin_Forge from mod modernfix,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Images from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Keybinds from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_PipelineManagement from mod iris,pl:mixin:APP:fabric-screen-api-v1.mixins.json:MinecraftClientMixin from mod fabric_screen_api_v1,pl:mixin:APP:supplementaries-common.mixins.json:MinecraftMixin from mod supplementaries,pl:mixin:APP:accessories-common.mixins.json:client.MinecraftMixin from mod accessories,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.MinecraftAccessor from mod cumulus_menus,pl:mixin:APP:aaa_particles-common.mixins.json:client.MixinMinecraft from mod aaa_particles,pl:mixin:APP:laserbridges.mixins.json:MixinMinecraft from mod laserbridges,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft from mod glitchcore,pl:mixin:APP:sodium-common.mixins.json:core.MinecraftMixin from mod sodium,pl:mixin:APP:sodium-neoforge.mixins.json:platform.neoforge.EntrypointMixin from mod sodium,pl:mixin:APP:notenoughanimations.mixins.json:LivingRenderStateMixin from mod notenoughanimations,pl:mixin:APP:flywheel.impl.mixins.json:MinecraftMixin from mod flywheel,pl:mixin:APP:ponder.mixins.json:client.WindowResizeMixin from mod ponder,pl:mixin:APP:cold_sweat.mixin.json:MixinInventoryOpenClient from mod cold_sweat,pl:mixin:APP:cold_sweat.mixin.json:MixinPickEntity from mod cold_sweat,pl:mixin:APP:notenoughcrashes.mixins.json:client.MixinMinecraftClient from mod notenoughcrashes,pl:mixin:APP:aether.mixins.json:client.accessor.MinecraftAccessor from mod aether,pl:mixin:APP:bookshelf.mixins.json:access.client.AccessorMinecraft from mod bookshelf,pl:mixin:APP:carryon.mixins.json:MinecraftMixin from mod carryon,pl:mixin:APP:mixins.sodiumdynamiclights.json:MinecraftClientMixin from mod sodiumdynamiclights,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadEnd from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadStart from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:accessor.MinecraftClientAccessor from mod entity_model_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinMinecraftClient from mod entity_texture_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinResourceReload from mod entity_texture_features,pl:mixin:APP:betterthirdperson.mixins.json:MinecraftClientMixin from mod betterthirdperson,pl:mixin:APP:architectury.mixins.json:MixinMinecraft from mod architectury,pl:mixin:APP:fightorflight.mixins_common.json:MinecraftClientInject from mod fightorflight,pl:mixin:APP:fabric-networking-api-v1.client.mixins.json:accessor.MinecraftClientAccessor from mod fabric_networking_api_v1,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MinecraftMixin from mod smallships,pl:mixin:APP:l2menustacker.mixins.json:MinecraftMixin from mod l2menustacker,pl:mixin:APP:fabric-lifecycle-events-v1.client.mixins.json:MinecraftClientMixin from mod fabric_lifecycle_events_v1,pl:mixin:APP:owo.mixins.json:ui.MinecraftClientMixin from mod owo,pl:mixin:APP:utility_belt.client.mixins.json:MinecraftMixin from mod utility_belt,pl:mixin:APP:moonlight-common.mixins.json:MinecraftMixin from mod moonlight,pl:mixin:APP:iceberg.mixins.json:MinecraftMixin from mod iceberg,pl:mixin:APP:irons_spellbooks.mixins.json:MinecraftMixin from mod irons_spellbooks,pl:mixin:APP:fabric-events-interaction-v0.client.mixins.json:MinecraftClientMixin from mod fabric_events_interaction_v0,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin from mod (unknown),pl:mixin:APP:create.mixins.json:accessor.MinecraftAccessor from mod create,pl:mixin:APP:modernfix-common.mixins.json:feature.remove_telemetry.MinecraftMixin_Telemetry from mod modernfix,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.main.Main.main(Main.java:230) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:runtimedistcleaner:A,re:classloading,pl:mixin:APP:notenoughcrashes.forge.mixins.json:client.MixinMain from mod notenoughcrashes,pl:mixin:A,pl:runtimedistcleaner:A}     at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] {}     at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] {re:mixin}     at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:136) ~[loader-4.0.38.jar%23120!/:4.0] {}     at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:124) ~[loader-4.0.38.jar%23120!/:4.0] {}     at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonClientLaunchHandler.runService(CommonClientLaunchHandler.java:32) ~[loader-4.0.38.jar%23120!/:4.0] {}     at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.lambda$launchService$4(CommonLaunchHandler.java:118) ~[loader-4.0.38.jar%23120!/:4.0] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.run(Launcher.java:103) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.main(Launcher.java:74) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-11.0.4.jar%23106!/:?] {}     at [email protected]/cpw.mods.bootstraplauncher.BootstrapLauncher.run(BootstrapLauncher.java:210) [bootstraplauncher-2.0.2.jar:?] {}     at [email protected]/cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:69) [bootstraplauncher-2.0.2.jar:?] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace:     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.load(RegistryDataLoader.java:154) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.mixinextras$bridge$load$34(RegistryDataLoader.java) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.wrapOperation$cjo000$fabric_resource_conditions_api_v1$captureRegistries(RegistryDataLoader.java:555) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.mixinextras$bridge$wrapOperation$cjo000$fabric_resource_conditions_api_v1$captureRegistries$35(RegistryDataLoader.java) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.wrapOperation$cml000$fabric_registry_sync_v0$wrapIsServerCall(RegistryDataLoader.java:1052) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.resources.RegistryDataLoader.load(RegistryDataLoader.java:118) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-resource-conditions-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_resource_conditions_api_v1,pl:mixin:APP:fabric-registry-sync-v0.mixins.json:RegistryLoaderMixin from mod fabric_registry_sync_v0,pl:mixin:APP:fabric-item-api-v1.mixins.json:RegistryLoaderMixin from mod fabric_item_api_v1,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.server.WorldLoader.loadLayer(WorldLoader.java:76) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.server.WorldLoader.loadAndReplaceLayer(WorldLoader.java:82) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.server.WorldLoader.load(WorldLoader.java:35) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.worldselection.CreateWorldScreen.openFresh(CreateWorldScreen.java:123) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.CreateWorldScreenMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:bugfix.extra_experimental_screen.CreateWorldScreenMixin from mod modernfix,pl:mixin:APP:cumulus_menus.mixins.json:client.CreateWorldScreenMixin from mod cumulus_menus,pl:mixin:APP:fabric-resource-loader-v0.client.mixins.json:CreateWorldScreenMixin from mod fabric_resource_loader_v0,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.worldselection.WorldSelectionList.loadLevels(WorldSelectionList.java:192) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.worldselection.WorldSelectionList.<init>(WorldSelectionList.java:111) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.worldselection.SelectWorldScreen.init(SelectWorldScreen.java:51) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.Screen.init(Screen.java:317) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-screen-api-v1.mixins.json:ScreenMixin from mod fabric_screen_api_v1,pl:mixin:APP:balm.neoforge.mixins.json:ScreenAccessor from mod balm,pl:mixin:APP:fabric-screen-api-v1.mixins.json:ScreenAccessor from mod fabric_screen_api_v1,pl:mixin:APP:immersiveui-common.mixins.json:ScreenMixin from mod immersiveui,pl:mixin:APP:mixins.cobblemon-neoforge.json:ScreenMixin from mod cobblemon,pl:mixin:APP:yungsmenutweaks.mixins.json:ScreenMixin from mod yungsmenutweaks,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.ScreenAccessor from mod cumulus_menus,pl:mixin:APP:ponder.mixins.json:client.accessor.ScreenAccessor from mod ponder,pl:mixin:APP:cold_sweat.mixin.json:MixinChatClicked from mod cold_sweat,pl:mixin:APP:aether.mixins.json:client.accessor.ScreenAccessor from mod aether,pl:mixin:APP:relics.mixins.json:ScreenMixin from mod relics,pl:mixin:APP:patchouli_xplat.mixins.json:client.AccessorScreen from mod patchouli,pl:mixin:APP:owo.mixins.json:ScreenAccessor from mod owo,pl:mixin:APP:owo.mixins.json:ui.ScreenMixin from mod owo,pl:mixin:APP:iceberg.mixins.json:ScreenMixin from mod iceberg,pl:mixin:APP:owo.mixins.json:ui.layers.ScreenMixin from mod owo,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.setScreen(Minecraft.java:1057) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:mixin:APP:owo.mixins.json:MinecraftClientMixin from mod owo,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:feature.measure_time.MinecraftMixin_Forge from mod modernfix,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Images from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Keybinds from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_PipelineManagement from mod iris,pl:mixin:APP:fabric-screen-api-v1.mixins.json:MinecraftClientMixin from mod fabric_screen_api_v1,pl:mixin:APP:supplementaries-common.mixins.json:MinecraftMixin from mod supplementaries,pl:mixin:APP:accessories-common.mixins.json:client.MinecraftMixin from mod accessories,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.MinecraftAccessor from mod cumulus_menus,pl:mixin:APP:aaa_particles-common.mixins.json:client.MixinMinecraft from mod aaa_particles,pl:mixin:APP:laserbridges.mixins.json:MixinMinecraft from mod laserbridges,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft from mod glitchcore,pl:mixin:APP:sodium-common.mixins.json:core.MinecraftMixin from mod sodium,pl:mixin:APP:sodium-neoforge.mixins.json:platform.neoforge.EntrypointMixin from mod sodium,pl:mixin:APP:notenoughanimations.mixins.json:LivingRenderStateMixin from mod notenoughanimations,pl:mixin:APP:flywheel.impl.mixins.json:MinecraftMixin from mod flywheel,pl:mixin:APP:ponder.mixins.json:client.WindowResizeMixin from mod ponder,pl:mixin:APP:cold_sweat.mixin.json:MixinInventoryOpenClient from mod cold_sweat,pl:mixin:APP:cold_sweat.mixin.json:MixinPickEntity from mod cold_sweat,pl:mixin:APP:notenoughcrashes.mixins.json:client.MixinMinecraftClient from mod notenoughcrashes,pl:mixin:APP:aether.mixins.json:client.accessor.MinecraftAccessor from mod aether,pl:mixin:APP:bookshelf.mixins.json:access.client.AccessorMinecraft from mod bookshelf,pl:mixin:APP:carryon.mixins.json:MinecraftMixin from mod carryon,pl:mixin:APP:mixins.sodiumdynamiclights.json:MinecraftClientMixin from mod sodiumdynamiclights,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadEnd from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadStart from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:accessor.MinecraftClientAccessor from mod entity_model_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinMinecraftClient from mod entity_texture_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinResourceReload from mod entity_texture_features,pl:mixin:APP:betterthirdperson.mixins.json:MinecraftClientMixin from mod betterthirdperson,pl:mixin:APP:architectury.mixins.json:MixinMinecraft from mod architectury,pl:mixin:APP:fightorflight.mixins_common.json:MinecraftClientInject from mod fightorflight,pl:mixin:APP:fabric-networking-api-v1.client.mixins.json:accessor.MinecraftClientAccessor from mod fabric_networking_api_v1,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MinecraftMixin from mod smallships,pl:mixin:APP:l2menustacker.mixins.json:MinecraftMixin from mod l2menustacker,pl:mixin:APP:fabric-lifecycle-events-v1.client.mixins.json:MinecraftClientMixin from mod fabric_lifecycle_events_v1,pl:mixin:APP:owo.mixins.json:ui.MinecraftClientMixin from mod owo,pl:mixin:APP:utility_belt.client.mixins.json:MinecraftMixin from mod utility_belt,pl:mixin:APP:moonlight-common.mixins.json:MinecraftMixin from mod moonlight,pl:mixin:APP:iceberg.mixins.json:MinecraftMixin from mod iceberg,pl:mixin:APP:irons_spellbooks.mixins.json:MinecraftMixin from mod irons_spellbooks,pl:mixin:APP:fabric-events-interaction-v0.client.mixins.json:MinecraftClientMixin from mod fabric_events_interaction_v0,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin from mod (unknown),pl:mixin:APP:create.mixins.json:accessor.MinecraftAccessor from mod create,pl:mixin:APP:modernfix-common.mixins.json:feature.remove_telemetry.MinecraftMixin_Telemetry from mod modernfix,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.TitleScreen.lambda$createNormalMenuOptions$7(TitleScreen.java:161) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.iris.json:MixinTitleScreen from mod iris,pl:mixin:APP:cumulus_menus.mixins.json:client.TitleScreenMixin from mod cumulus_menus,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.TitleScreenAccessor from mod cumulus_menus,pl:mixin:APP:aether.mixins.json:client.accessor.TitleScreenAccessor from mod aether,pl:mixin:APP:collective_neoforge.mixins.json:TitleScreenMixin from mod collective,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.components.Button.onPress(Button.java:41) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.components.AbstractButton.onClick(AbstractButton.java:47) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:accessories-common.mixins.json:client.AbstractButtonMixin from mod accessories,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.neoforged.neoforge.client.extensions.IAbstractWidgetExtension.onClick(IAbstractWidgetExtension.java:36) ~[neoforge-21.1.133-universal.jar%23398!/:?] {re:computing_frames,re:mixin,re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.components.AbstractWidget.mouseClicked(AbstractWidget.java:144) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:yungsmenutweaks.mixins.json:AbstractWidgetMixin from mod yungsmenutweaks,pl:mixin:APP:accessories-common.mixins.json:client.owo.ComponentStubMixin from mod accessories,pl:mixin:APP:owo.mixins.json:ui.ClickableWidgetMixin from mod owo,pl:mixin:APP:owo.mixins.json:ui.access.ClickableWidgetAccessor from mod owo,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.components.events.ContainerEventHandler.mouseClicked(ContainerEventHandler.java:38) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,re:mixin,re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.TitleScreen.mouseClicked(TitleScreen.java:340) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.iris.json:MixinTitleScreen from mod iris,pl:mixin:APP:cumulus_menus.mixins.json:client.TitleScreenMixin from mod cumulus_menus,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.TitleScreenAccessor from mod cumulus_menus,pl:mixin:APP:aether.mixins.json:client.accessor.TitleScreenAccessor from mod aether,pl:mixin:APP:collective_neoforge.mixins.json:TitleScreenMixin from mod collective,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.MouseHandler.lambda$onPress$0(MouseHandler.java:98) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:betterthirdperson.mixins.json:MouseMixin from mod betterthirdperson,pl:mixin:APP:balm.neoforge.mixins.json:MouseHandlerAccessor from mod balm,pl:mixin:APP:supplementaries-common.mixins.json:MouseHandlerMixin from mod supplementaries,pl:mixin:APP:mixins.cobblemon-common.json:MouseHandlerMixin from mod cobblemon,pl:mixin:APP:relics.mixins.json:MouseHandlerMixin from mod relics,pl:mixin:APP:smallships-common.mixins.json:zooming.client.MouseHandlerMixin from mod smallships,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MouseHandlerAccessor from mod smallships,pl:mixin:APP:owo.mixins.json:ui.layers.MouseMixin from mod owo,pl:mixin:APP:create.mixins.json:accessor.MouseHandlerAccessor from mod create,pl:mixin:APP:betterthirdperson.mixins.json:MouseFixupMixin from mod betterthirdperson,pl:mixin:A,pl:runtimedistcleaner:A} -- Affected screen -- Details:     Screen name: net.minecraft.client.gui.screens.TitleScreen Stacktrace:     at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.Screen.wrapScreenError(Screen.java:451) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:fabric-screen-api-v1.mixins.json:ScreenMixin from mod fabric_screen_api_v1,pl:mixin:APP:balm.neoforge.mixins.json:ScreenAccessor from mod balm,pl:mixin:APP:fabric-screen-api-v1.mixins.json:ScreenAccessor from mod fabric_screen_api_v1,pl:mixin:APP:immersiveui-common.mixins.json:ScreenMixin from mod immersiveui,pl:mixin:APP:mixins.cobblemon-neoforge.json:ScreenMixin from mod cobblemon,pl:mixin:APP:yungsmenutweaks.mixins.json:ScreenMixin from mod yungsmenutweaks,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.ScreenAccessor from mod cumulus_menus,pl:mixin:APP:ponder.mixins.json:client.accessor.ScreenAccessor from mod ponder,pl:mixin:APP:cold_sweat.mixin.json:MixinChatClicked from mod cold_sweat,pl:mixin:APP:aether.mixins.json:client.accessor.ScreenAccessor from mod aether,pl:mixin:APP:relics.mixins.json:ScreenMixin from mod relics,pl:mixin:APP:patchouli_xplat.mixins.json:client.AccessorScreen from mod patchouli,pl:mixin:APP:owo.mixins.json:ScreenAccessor from mod owo,pl:mixin:APP:owo.mixins.json:ui.ScreenMixin from mod owo,pl:mixin:APP:iceberg.mixins.json:ScreenMixin from mod iceberg,pl:mixin:APP:owo.mixins.json:ui.layers.ScreenMixin from mod owo,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.MouseHandler.onPress(MouseHandler.java:95) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:betterthirdperson.mixins.json:MouseMixin from mod betterthirdperson,pl:mixin:APP:balm.neoforge.mixins.json:MouseHandlerAccessor from mod balm,pl:mixin:APP:supplementaries-common.mixins.json:MouseHandlerMixin from mod supplementaries,pl:mixin:APP:mixins.cobblemon-common.json:MouseHandlerMixin from mod cobblemon,pl:mixin:APP:relics.mixins.json:MouseHandlerMixin from mod relics,pl:mixin:APP:smallships-common.mixins.json:zooming.client.MouseHandlerMixin from mod smallships,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MouseHandlerAccessor from mod smallships,pl:mixin:APP:owo.mixins.json:ui.layers.MouseMixin from mod owo,pl:mixin:APP:create.mixins.json:accessor.MouseHandlerAccessor from mod create,pl:mixin:APP:betterthirdperson.mixins.json:MouseFixupMixin from mod betterthirdperson,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.MouseHandler.lambda$setup$4(MouseHandler.java:202) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:betterthirdperson.mixins.json:MouseMixin from mod betterthirdperson,pl:mixin:APP:balm.neoforge.mixins.json:MouseHandlerAccessor from mod balm,pl:mixin:APP:supplementaries-common.mixins.json:MouseHandlerMixin from mod supplementaries,pl:mixin:APP:mixins.cobblemon-common.json:MouseHandlerMixin from mod cobblemon,pl:mixin:APP:relics.mixins.json:MouseHandlerMixin from mod relics,pl:mixin:APP:smallships-common.mixins.json:zooming.client.MouseHandlerMixin from mod smallships,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MouseHandlerAccessor from mod smallships,pl:mixin:APP:owo.mixins.json:ui.layers.MouseMixin from mod owo,pl:mixin:APP:create.mixins.json:accessor.MouseHandlerAccessor from mod create,pl:mixin:APP:betterthirdperson.mixins.json:MouseFixupMixin from mod betterthirdperson,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.execute(BlockableEventLoop.java:98) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.fix_loop_spin_waiting.BlockableEventLoopMixin from mod modernfix,pl:mixin:A}     at TRANSFORMER/[email protected]/net.minecraft.client.MouseHandler.lambda$setup$5(MouseHandler.java:202) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:betterthirdperson.mixins.json:MouseMixin from mod betterthirdperson,pl:mixin:APP:balm.neoforge.mixins.json:MouseHandlerAccessor from mod balm,pl:mixin:APP:supplementaries-common.mixins.json:MouseHandlerMixin from mod supplementaries,pl:mixin:APP:mixins.cobblemon-common.json:MouseHandlerMixin from mod cobblemon,pl:mixin:APP:relics.mixins.json:MouseHandlerMixin from mod relics,pl:mixin:APP:smallships-common.mixins.json:zooming.client.MouseHandlerMixin from mod smallships,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MouseHandlerAccessor from mod smallships,pl:mixin:APP:owo.mixins.json:ui.layers.MouseMixin from mod owo,pl:mixin:APP:create.mixins.json:accessor.MouseHandlerAccessor from mod create,pl:mixin:APP:betterthirdperson.mixins.json:MouseFixupMixin from mod betterthirdperson,pl:mixin:A,pl:runtimedistcleaner:A}     at MC-BOOTSTRAP/[email protected]+5/org.lwjgl.glfw.GLFWMouseButtonCallbackI.callback(GLFWMouseButtonCallbackI.java:43) ~[lwjgl-glfw-3.3.3.jar%23165!/:build 5] {}     at MC-BOOTSTRAP/[email protected]+5/org.lwjgl.system.JNI.invokeV(Native Method) ~[lwjgl-3.3.3.jar%23177!/:build 5] {}     at MC-BOOTSTRAP/[email protected]+5/org.lwjgl.glfw.GLFW.glfwWaitEventsTimeout(GLFW.java:3509) ~[lwjgl-glfw-3.3.3.jar%23165!/:build 5] {re:mixin}     at TRANSFORMER/[email protected]/com.mojang.blaze3d.systems.RenderSystem.limitDisplayFPS(RenderSystem.java:162) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.iris.json:MixinGlStateManager from mod iris,pl:mixin:APP:mixins.iris.json:MixinRenderSystem from mod iris,pl:mixin:APP:mixins.iris.json:statelisteners.MixinRenderSystem from mod iris,pl:mixin:APP:sodium-common.mixins.json:workarounds.event_loop.RenderSystemMixin from mod sodium,pl:mixin:APP:flywheel.backend.mixins.json:RenderSystemMixin from mod flywheel,pl:mixin:APP:ponder.mixins.json:client.accessor.RenderSystemAccessor from mod ponder,pl:mixin:APP:owo.mixins.json:ui.RenderSystemMixin from mod owo,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.runTick(Minecraft.java:1220) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:mixin:APP:owo.mixins.json:MinecraftClientMixin from mod owo,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:feature.measure_time.MinecraftMixin_Forge from mod modernfix,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Images from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Keybinds from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_PipelineManagement from mod iris,pl:mixin:APP:fabric-screen-api-v1.mixins.json:MinecraftClientMixin from mod fabric_screen_api_v1,pl:mixin:APP:supplementaries-common.mixins.json:MinecraftMixin from mod supplementaries,pl:mixin:APP:accessories-common.mixins.json:client.MinecraftMixin from mod accessories,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.MinecraftAccessor from mod cumulus_menus,pl:mixin:APP:aaa_particles-common.mixins.json:client.MixinMinecraft from mod aaa_particles,pl:mixin:APP:laserbridges.mixins.json:MixinMinecraft from mod laserbridges,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft from mod glitchcore,pl:mixin:APP:sodium-common.mixins.json:core.MinecraftMixin from mod sodium,pl:mixin:APP:sodium-neoforge.mixins.json:platform.neoforge.EntrypointMixin from mod sodium,pl:mixin:APP:notenoughanimations.mixins.json:LivingRenderStateMixin from mod notenoughanimations,pl:mixin:APP:flywheel.impl.mixins.json:MinecraftMixin from mod flywheel,pl:mixin:APP:ponder.mixins.json:client.WindowResizeMixin from mod ponder,pl:mixin:APP:cold_sweat.mixin.json:MixinInventoryOpenClient from mod cold_sweat,pl:mixin:APP:cold_sweat.mixin.json:MixinPickEntity from mod cold_sweat,pl:mixin:APP:notenoughcrashes.mixins.json:client.MixinMinecraftClient from mod notenoughcrashes,pl:mixin:APP:aether.mixins.json:client.accessor.MinecraftAccessor from mod aether,pl:mixin:APP:bookshelf.mixins.json:access.client.AccessorMinecraft from mod bookshelf,pl:mixin:APP:carryon.mixins.json:MinecraftMixin from mod carryon,pl:mixin:APP:mixins.sodiumdynamiclights.json:MinecraftClientMixin from mod sodiumdynamiclights,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadEnd from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadStart from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:accessor.MinecraftClientAccessor from mod entity_model_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinMinecraftClient from mod entity_texture_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinResourceReload from mod entity_texture_features,pl:mixin:APP:betterthirdperson.mixins.json:MinecraftClientMixin from mod betterthirdperson,pl:mixin:APP:architectury.mixins.json:MixinMinecraft from mod architectury,pl:mixin:APP:fightorflight.mixins_common.json:MinecraftClientInject from mod fightorflight,pl:mixin:APP:fabric-networking-api-v1.client.mixins.json:accessor.MinecraftClientAccessor from mod fabric_networking_api_v1,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MinecraftMixin from mod smallships,pl:mixin:APP:l2menustacker.mixins.json:MinecraftMixin from mod l2menustacker,pl:mixin:APP:fabric-lifecycle-events-v1.client.mixins.json:MinecraftClientMixin from mod fabric_lifecycle_events_v1,pl:mixin:APP:owo.mixins.json:ui.MinecraftClientMixin from mod owo,pl:mixin:APP:utility_belt.client.mixins.json:MinecraftMixin from mod utility_belt,pl:mixin:APP:moonlight-common.mixins.json:MinecraftMixin from mod moonlight,pl:mixin:APP:iceberg.mixins.json:MinecraftMixin from mod iceberg,pl:mixin:APP:irons_spellbooks.mixins.json:MinecraftMixin from mod irons_spellbooks,pl:mixin:APP:fabric-events-interaction-v0.client.mixins.json:MinecraftClientMixin from mod fabric_events_interaction_v0,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin from mod (unknown),pl:mixin:APP:create.mixins.json:accessor.MinecraftAccessor from mod create,pl:mixin:APP:modernfix-common.mixins.json:feature.remove_telemetry.MinecraftMixin_Telemetry from mod modernfix,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.run(Minecraft.java:807) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:mixin:APP:owo.mixins.json:MinecraftClientMixin from mod owo,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:feature.measure_time.MinecraftMixin_Forge from mod modernfix,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Images from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_Keybinds from mod iris,pl:mixin:APP:mixins.iris.json:MixinMinecraft_PipelineManagement from mod iris,pl:mixin:APP:fabric-screen-api-v1.mixins.json:MinecraftClientMixin from mod fabric_screen_api_v1,pl:mixin:APP:supplementaries-common.mixins.json:MinecraftMixin from mod supplementaries,pl:mixin:APP:accessories-common.mixins.json:client.MinecraftMixin from mod accessories,pl:mixin:APP:cumulus_menus.mixins.json:client.accessor.MinecraftAccessor from mod cumulus_menus,pl:mixin:APP:aaa_particles-common.mixins.json:client.MixinMinecraft from mod aaa_particles,pl:mixin:APP:laserbridges.mixins.json:MixinMinecraft from mod laserbridges,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft from mod glitchcore,pl:mixin:APP:sodium-common.mixins.json:core.MinecraftMixin from mod sodium,pl:mixin:APP:sodium-neoforge.mixins.json:platform.neoforge.EntrypointMixin from mod sodium,pl:mixin:APP:notenoughanimations.mixins.json:LivingRenderStateMixin from mod notenoughanimations,pl:mixin:APP:flywheel.impl.mixins.json:MinecraftMixin from mod flywheel,pl:mixin:APP:ponder.mixins.json:client.WindowResizeMixin from mod ponder,pl:mixin:APP:cold_sweat.mixin.json:MixinInventoryOpenClient from mod cold_sweat,pl:mixin:APP:cold_sweat.mixin.json:MixinPickEntity from mod cold_sweat,pl:mixin:APP:notenoughcrashes.mixins.json:client.MixinMinecraftClient from mod notenoughcrashes,pl:mixin:APP:aether.mixins.json:client.accessor.MinecraftAccessor from mod aether,pl:mixin:APP:bookshelf.mixins.json:access.client.AccessorMinecraft from mod bookshelf,pl:mixin:APP:carryon.mixins.json:MinecraftMixin from mod carryon,pl:mixin:APP:mixins.sodiumdynamiclights.json:MinecraftClientMixin from mod sodiumdynamiclights,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadEnd from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:MixinResourceReloadStart from mod entity_model_features,pl:mixin:APP:entity_model_features-common.mixins.json:accessor.MinecraftClientAccessor from mod entity_model_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinMinecraftClient from mod entity_texture_features,pl:mixin:APP:entity_texture_features-common.mixins.json:reloading.MixinResourceReload from mod entity_texture_features,pl:mixin:APP:betterthirdperson.mixins.json:MinecraftClientMixin from mod betterthirdperson,pl:mixin:APP:architectury.mixins.json:MixinMinecraft from mod architectury,pl:mixin:APP:fightorflight.mixins_common.json:MinecraftClientInject from mod fightorflight,pl:mixin:APP:fabric-networking-api-v1.client.mixins.json:accessor.MinecraftClientAccessor from mod fabric_networking_api_v1,pl:mixin:APP:smallships-fabric-neoforge.mixins.json:container.MinecraftMixin from mod smallships,pl:mixin:APP:l2menustacker.mixins.json:MinecraftMixin from mod l2menustacker,pl:mixin:APP:fabric-lifecycle-events-v1.client.mixins.json:MinecraftClientMixin from mod fabric_lifecycle_events_v1,pl:mixin:APP:owo.mixins.json:ui.MinecraftClientMixin from mod owo,pl:mixin:APP:utility_belt.client.mixins.json:MinecraftMixin from mod utility_belt,pl:mixin:APP:moonlight-common.mixins.json:MinecraftMixin from mod moonlight,pl:mixin:APP:iceberg.mixins.json:MinecraftMixin from mod iceberg,pl:mixin:APP:irons_spellbooks.mixins.json:MinecraftMixin from mod irons_spellbooks,pl:mixin:APP:fabric-events-interaction-v0.client.mixins.json:MinecraftClientMixin from mod fabric_events_interaction_v0,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin from mod (unknown),pl:mixin:APP:create.mixins.json:accessor.MinecraftAccessor from mod create,pl:mixin:APP:modernfix-common.mixins.json:feature.remove_telemetry.MinecraftMixin_Telemetry from mod modernfix,pl:mixin:A,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.main.Main.main(Main.java:230) ~[client-1.21.1-20240808.144430-srg.jar%23397!/:?] {re:mixin,pl:runtimedistcleaner:A,re:classloading,pl:mixin:APP:notenoughcrashes.forge.mixins.json:client.MixinMain from mod notenoughcrashes,pl:mixin:A,pl:runtimedistcleaner:A}     at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] {}     at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] {re:mixin}     at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:136) ~[loader-4.0.38.jar%23120!/:4.0] {}     at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:124) ~[loader-4.0.38.jar%23120!/:4.0] {}     at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonClientLaunchHandler.runService(CommonClientLaunchHandler.java:32) ~[loader-4.0.38.jar%23120!/:4.0] {}     at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.lambda$launchService$4(CommonLaunchHandler.java:118) ~[loader-4.0.38.jar%23120!/:4.0] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.run(Launcher.java:103) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.main(Launcher.java:74) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-11.0.4.jar%23106!/:?] {}     at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-11.0.4.jar%23106!/:?] {}     at [email protected]/cpw.mods.bootstraplauncher.BootstrapLauncher.run(BootstrapLauncher.java:210) [bootstraplauncher-2.0.2.jar:?] {}     at [email protected]/cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:69) [bootstraplauncher-2.0.2.jar:?] {} -- Cobblemon -- Details:     Version: 1.6.1     Is Snapshot: false     Git Commit: c66de51 (https://gitlab.com/cable-mc/cobblemon/-/commit/c66de51e39dd5144bde3550f630b58f67a835b65)     Branch: HEAD -- System Details -- Details:     Minecraft Version: 1.21.1     Minecraft Version ID: 1.21.1     Operating System: Windows 11 (amd64) version 10.0     Java Version: 21.0.3, Microsoft     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Microsoft     Memory: 545257472 bytes (519 MiB) / 4823449600 bytes (4600 MiB) up to 8992587776 bytes (8576 MiB)     CPUs: 12     Processor Vendor: AuthenticAMD     Processor Name: AMD Ryzen 5 7600X 6-Core Processor                  Identifier: AuthenticAMD Family 25 Model 97 Stepping 2     Microarchitecture: Zen 3     Frequency (GHz): 4.69     Number of physical packages: 1     Number of physical CPUs: 6     Number of logical CPUs: 12     Graphics card #0 name: NVIDIA GeForce RTX 4060     Graphics card #0 vendor: NVIDIA     Graphics card #0 VRAM (MiB): 8188.00     Graphics card #0 deviceId: VideoController1     Graphics card #0 versionInfo: 32.0.15.6636     Graphics card #1 name: AMD Radeon(TM) Graphics     Graphics card #1 vendor: Advanced Micro Devices, Inc.     Graphics card #1 VRAM (MiB): 512.00     Graphics card #1 deviceId: VideoController2     Graphics card #1 versionInfo: 32.0.11034.2     Memory slot #0 capacity (MiB): 16384.00     Memory slot #0 clockSpeed (GHz): 6.00     Memory slot #0 type: Unknown     Memory slot #1 capacity (MiB): 16384.00     Memory slot #1 clockSpeed (GHz): 6.00     Memory slot #1 type: Unknown     Virtual memory max (MiB): 41077.56     Virtual memory used (MiB): 24675.50     Swap memory total (MiB): 8704.00     Swap memory used (MiB): 79.68     Space in storage for jna.tmpdir (MiB): available: 283548.59, total: 952929.00     Space in storage for org.lwjgl.system.SharedLibraryExtractPath (MiB): available: 283548.59, total: 952929.00     Space in storage for io.netty.native.workdir (MiB): available: 283548.59, total: 952929.00     Space in storage for java.io.tmpdir (MiB): available: 283548.59, total: 952929.00     Space in storage for workdir (MiB): available: 283548.59, total: 952929.00     JVM Flags: 4 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx8576m -Xms256m     Loaded Shaderpack: (off)     Client Crashes Since Restart: 1     Integrated Server Crashes Since Restart: 0     ModLauncher: 11.0.4+main.d2e20e43     ModLauncher launch target: forgeclient     ModLauncher services:          sponge-mixin-0.15.2+mixin.0.8.7.jar mixin PLUGINSERVICE          loader-4.0.38.jar slf4jfixer PLUGINSERVICE          loader-4.0.38.jar runtime_enum_extender PLUGINSERVICE          at-modlauncher-10.0.1.jar accesstransformer PLUGINSERVICE          loader-4.0.38.jar runtimedistcleaner PLUGINSERVICE          modlauncher-11.0.4.jar mixin TRANSFORMATIONSERVICE          modlauncher-11.0.4.jar fml TRANSFORMATIONSERVICE      FML Language Providers:          [email protected]         [email protected]+0.16.0+1.21         [email protected]         [email protected]         [email protected]         [email protected]     Mod List:          3d_placeable_food-2.4.0-neoforge-1.21.1.jar       |3D Placeable food             |placeable_food                |2.4.0               |Manifest: NOSIGNATURE         skinlayers3d-neoforge-1.7.4-mc1.21.jar            |3d-Skin-Layers                |skinlayers3d                  |1.7.4               |Manifest: NOSIGNATURE         a_good_place-1.21-1.2.5-neoforge.jar              |A Good Place                  |a_good_place                  |1.21-1.2.5          |Manifest: NOSIGNATURE         aaa_particles-1.21-1.4.9-neoforge.jar             |AAAParticles                  |aaa_particles                 |1.21-1.4.9          |Manifest: NOSIGNATURE         aaa_particles_world-neoforge-1.21-1.0.3.jar       |AAAParticles: World           |aaa_particles_world           |1.21-1.0.3          |Manifest: NOSIGNATURE         accessories-neoforge-1.1.0-beta.28+1.21.1.jar     |Accessories                   |accessories                   |1.1.0-beta.28+1.21.1|Manifest: NOSIGNATURE         additional_lights-neoforge-1.21-2.1.9.jar         |Additional Lights             |additional_lights             |2.1.9               |Manifest: NOSIGNATURE         AdvancementPlaques-1.21.1-neoforge-1.6.8.jar      |Advancement Plaques           |advancementplaques            |1.6.8               |Manifest: NOSIGNATURE         aeroblender-1.21.1-1.0.0-neoforge.jar             |AeroBlender                   |aeroblender                   |1.0.0               |Manifest: NOSIGNATURE         AetherVillages-1.21.1-1.0.8-neoforge.jar          |Aether Villages               |aether_villages               |1.0.8               |Manifest: NOSIGNATURE         AI-Improvements-1.21-0.5.3.jar                    |AI-Improvements               |aiimprovements                |0.5.3               |Manifest: NOSIGNATURE         amendments-1.21-1.2.24-neoforge.jar               |Amendments                    |amendments                    |1.21-1.2.24         |Manifest: NOSIGNATURE         animal_feeding_trough-1.1.2+1.21-neoforge.jar     |Animal Feeding Trough         |animal_feeding_trough         |1.1.2               |Manifest: NOSIGNATURE         Apotheosis-1.21.1-8.2.0.jar                       |Apotheosis                    |apotheosis                    |8.2.0               |Manifest: NOSIGNATURE         ApothicAttributes-1.21.1-2.6.2.jar                |Apothic Attributes            |apothic_attributes            |2.6.2               |Manifest: NOSIGNATURE         ApothicEnchanting-1.21.1-1.3.2.jar                |Apothic Enchanting            |apothic_enchanting            |1.3.2               |Manifest: NOSIGNATURE         ApothicSpawners-1.21.1-1.2.1.jar                  |Apothic Spawners              |apothic_spawners              |1.2.1               |Manifest: NOSIGNATURE         appleskin-neoforge-mc1.21-3.0.5.jar               |AppleSkin                     |appleskin                     |3.0.5+mc1.21        |Manifest: NOSIGNATURE         Aquaculture-1.21.1-2.7.13.jar                     |Aquaculture 2                 |aquaculture                   |2.7.13              |Manifest: NOSIGNATURE         aquaculturedelight-1.2.0-neoforge-1.21.1.jar      |Aquaculture Delight           |aquaculturedelight            |1.2.0               |Manifest: NOSIGNATURE         architectury-13.0.8-neoforge.jar                  |Architectury                  |architectury                  |13.0.8              |Manifest: NOSIGNATURE         atlas_api-1.21-1.0.2.jar                          |Atlas API                     |atlas_api                     |1.21-1.0.2          |Manifest: NOSIGNATURE         attributefix-neoforge-1.21.1-21.1.2.jar           |AttributeFix                  |attributefix                  |21.1.2              |Manifest: NOSIGNATURE         badgebox-neoforge-1.2.5.jar                       |Badge Box                     |badgebox                      |1.0.0               |Manifest: NOSIGNATURE         balm-neoforge-1.21.1-21.0.31.jar                  |Balm                          |balm                          |21.0.31             |Manifest: NOSIGNATURE         BetterThirdPerson-neoforge-1.9.0.jar              |Better Third Person           |betterthirdperson             |1.9.0               |Manifest: NOSIGNATURE         betterfpsdist-1.21-6.0.jar                        |betterfpsdist mod             |betterfpsdist                 |6.0                 |Manifest: NOSIGNATURE         bookshelf-neoforge-1.21.1-21.1.50.jar             |Bookshelf                     |bookshelf                     |21.1.50             |Manifest: NOSIGNATURE         rctcapturecap-neoforge-1.21.1-1.0.1.jar           |Capture Cap - RCT Version     |rctcapturecap                 |1.0.1               |Manifest: NOSIGNATURE         carryon-neoforge-1.21.1-2.2.2.11.jar              |Carry On                      |carryon                       |2.2.2               |Manifest: NOSIGNATURE         [neoforge]ctov-3.5.6.jar                          |ChoiceTheorem's Overhauled Vil|ctov                          |3.5.6               |Manifest: NOSIGNATURE         Chunky-1.4.16.jar                                 |Chunky                        |chunky                        |1.4.16              |Manifest: NOSIGNATURE         CityCraft-1.21-(v.2.3.0-NEO).jar                  |City Craft                    |citycraft                     |2.3.0               |Manifest: NOSIGNATURE         cloth-config-neoforge-15.0.140-neoforge.jar       |Cloth Config v15 API          |cloth_config                  |15.0.140            |Manifest: NOSIGNATURE         Clumps-neoforge-1.21.1-19.0.0.1.jar               |Clumps                        |clumps                        |19.0.0.1            |Manifest: NOSIGNATURE         CobbleBadges-neoforge-3.0.0+Beta-3+1.21.1.jar     |CobbleBadges                  |cobblebadges                  |3.0.0+Beta-3+1.21.1 |Manifest: NOSIGNATURE         Cobblemon-neoforge-1.6.1+1.21.1.jar               |Cobblemon                     |cobblemon                     |1.6.1+1.21.1        |Manifest: NOSIGNATURE         Cobblemon AFP 1.8.1-1.21.1-NeoForge.jar           |Cobblemon Alatia's Fakemon Pac|cobblemon_alatia              |1.8.1-1.21.1-neoforg|Manifest: NOSIGNATURE         capture-xp-1.6-neoforge-1.0.0.jar                 |Cobblemon Capture XP          |capture_xp                    |1.6-neoforge-1.0.0  |Manifest: NOSIGNATURE         cobblemonchallenge-neoforge-2.1.0.jar             |Cobblemon Challenge           |cobblemonchallenge            |2.1.0               |Manifest: NOSIGNATURE         fightorflight-neoforge-0.7.6.jar                  |Cobblemon Fight or Flight     |fightorflight                 |0.7.6               |Manifest: NOSIGNATURE         CobblemonMoveInspector-neoforge-1.2.0.jar         |Cobblemon Move Inspector      |cobblemon_move_inspector      |1.2.0               |Manifest: NOSIGNATURE         cobblemonparts-1.2-NEO1.21.1.jar                  |Cobblemon Parts               |cobblemonparts                |1.2                 |Manifest: NOSIGNATURE         cobblemon_quests-[1.21.1]-neoforge-1.1.12.jar     |Cobblemon Quests              |cobblemon_quests              |1.1.12              |Manifest: NOSIGNATURE         cobblemon_smartphone-neoforge-1.0.2.jar           |Cobblemon Smartphone          |cobblemon_smartphone          |1.0.2               |Manifest: NOSIGNATURE         cobblemon-spawn-notification-1.6-neoforge-1.0.0.ja|Cobblemon Spawn Notification  |spawn_notification            |1.6-neoforge-1.0.0  |Manifest: NOSIGNATURE         Cobblemon-TM-neoforge-1.2.jar                     |Cobblemon TM                  |cobblemon_tm                  |1.2                 |Manifest: NOSIGNATURE         cobbleloots-neoforge-2.0.0.jar                    |Cobblemon: CobbleLoots        |cobbleloots                   |2.0.0               |Manifest: NOSIGNATURE         cobblemonextrastructures-1.21.1-1.0.0.jar         |Cobblemon: Extra Structures   |cobblemonextrastructures      |1.21.1-1.0.0        |Manifest: NOSIGNATURE         Cobblemon_MegaShowdown-6.4.1-release-neoforge.jar |Cobblemon: Mega Showdown      |mega_showdown                 |6.4.1-release-neofor|Manifest: NOSIGNATURE         CobblemonSizeVariationNeoforge-1.1.0+1.6.1.jar    |CobblemonSizeVariation        |cobblemonsizevariation        |1.1.0               |Manifest: NOSIGNATURE         cobblenav-neoforge-2.1.0.jar                      |Cobblenav                     |cobblenav                     |2.1.0               |Manifest: NOSIGNATURE         Cobblepedia-NeoForge-0.7.0.jar                    |Cobblepedia                   |cobblepedia                   |0.7.0               |Manifest: NOSIGNATURE         ColdSweat-2.3.12.jar                              |Cold Sweat                    |cold_sweat                    |2.3.12              |Manifest: NOSIGNATURE         collective-1.21.1-7.94.jar                        |Collective                    |collective                    |7.94                |Manifest: NOSIGNATURE         comforts-neoforge-9.0.3+1.21.1.jar                |Comforts                      |comforts                      |9.0.3+1.21.1        |Manifest: NOSIGNATURE         cgl-1.21-neoforge-0.5.1.jar                       |CommonGroovyLibrary           |commongroovylibrary           |0.5.1               |Manifest: NOSIGNATURE         Controlling-neoforge-1.21.1-19.0.4.jar            |Controlling                   |controlling                   |19.0.4              |Manifest: NOSIGNATURE         corpse-neoforge-1.21.1-1.1.5.jar                  |Corpse                        |corpse                        |1.21.1-1.1.5        |Manifest: NOSIGNATURE         cosmeticarmorreworked-1.21.1-v1-neoforge.jar      |CosmeticArmorReworked         |cosmeticarmorreworked         |1.21.1-v1-neoforge  |Manifest: 5e:ed:25:99:e4:44:14:c0:dd:89:c1:a9:4c:10:b5:0d:e4:b1:52:50:45:82:13:d8:d0:32:89:67:56:57:01:53         create-1.21.1-6.0.2.jar                           |Create                        |create                        |6.0.2               |Manifest: NOSIGNATURE         create_ltab-2.6.0.jar                             |Create Let The Adventure Begin|create_ltab                   |2.6.0               |Manifest: NOSIGNATURE         bellsandwhistles-0.4.6-1.21.1.jar                 |Create: Bells & Whistles      |bellsandwhistles              |0.4.6-1.21.1        |Manifest: NOSIGNATURE         Create_Desires-2-Dreams-1.21.1-2.0.0.jar          |Create: Desires 2 Dreams      |create_d2d                    |2.0.0               |Manifest: NOSIGNATURE         create_easy_structures-0.1.3-neoforge-1.21.1.jar  |Create: Easy Structures       |create_easy_structures        |0.1.3               |Manifest: NOSIGNATURE         create_sky_village-0.0.30J-neoforge-1.21.1.jar    |Create: Sky Village           |create_sky_village            |0.0.30              |Manifest: NOSIGNATURE         create_structures_arise-149.22.21-neoforge-1.21.1.|Create: Structures Arise      |create_structures_arise       |149.22.21           |Manifest: NOSIGNATURE         create_ultimate_factory-1.9.0-neoforge-1.21.1.jar |Create: Ultimate Factory      |create_ultimate_factory       |1.9.0               |Manifest: NOSIGNATURE         create_better_villagers-1.2.6-Neoforge-1.21.1.jar |Create_Better_Villagers       |create_better_villagers       |1.2.6-Neoforge-1.21.|Manifest: NOSIGNATURE         cullleaves-neoforge-4.0.1.jar                     |CullLeaves                    |cullleaves                    |4.0.1               |Manifest: NOSIGNATURE         cumulus_menus-1.21.1-2.0.3-neoforge.jar           |Cumulus                       |cumulus_menus                 |2.0.3               |Manifest: NOSIGNATURE         cupboard-1.21-2.9.jar                             |Cupboard mod                  |cupboard                      |2.9                 |Manifest: NOSIGNATURE         curios-neoforge-9.3.0+1.21.1.jar                  |Curios API                    |curios                        |9.3.0+1.21.1        |Manifest: NOSIGNATURE         deep_aether-1.21.1-1.1.2.jar                      |Deep Aether                   |deep_aether                   |1.1.2               |Manifest: NOSIGNATURE         deimos-1.21.1-neoforge-2.1.jar                    |Deimos                        |deimos                        |2.1                 |Manifest: NOSIGNATURE         dungeons-and-taverns-v4.4.4 [NeoForge].jar        |Dungeons and Taverns          |mr_dungeons_andtaverns        |1-v4.4.4            |Manifest: NOSIGNATURE         easyelevators-1.21.1-1.3.jar                      |Easy Elevators                |easyelevators                 |1.3                 |Manifest: NOSIGNATURE         easy_npc-neoforge-1.21.1-5.9.0.jar                |Easy NPC                      |easy_npc                      |0.0NONE             |Manifest: NOSIGNATURE         eatinganimation-1.21.0-6.0.1.jar                  |Eating Animation              |eatinganimation               |6.0.1               |Manifest: NOSIGNATURE         eggs-cobblemon-addon-0.6.jar                      |Eggs - Cobblemon Addon        |mr_eggs_cobblemonaddon        |0.6                 |Manifest: NOSIGNATURE         elevatorid-neoforge-1.21.1-1.11.4.jar             |ElevatorMod                   |elevatorid                    |1.21.1-1.11.4       |Manifest: NOSIGNATURE         enchdesc-neoforge-1.21.1-21.1.5.jar               |EnchantmentDescriptions       |enchdesc                      |21.1.5              |Manifest: NOSIGNATURE         entity_model_features_neoforge_1.21.1-2.4.1.jar   |Entity Model Features         |entity_model_features         |2.4.1               |Manifest: NOSIGNATURE         entity_texture_features_neoforge_1.21.1-6.2.9.jar |Entity Texture Features       |entity_texture_features       |6.2.9               |Manifest: NOSIGNATURE         entityculling-neoforge-1.7.3-mc1.21.jar           |EntityCulling                 |entityculling                 |1.7.3               |Manifest: NOSIGNATURE         epic-terrain_compatible-0.1.3.jar                 |Epic Terrain Compatible       |mr_epic_terrain_compatible    |0.1.3               |Manifest: NOSIGNATURE         EuphoriaPatcher-1.5.2-r5.4-neoforge.jar           |Euphoria Patcher              |euphoria_patcher              |1.5.2-r5.4-neoforge |Manifest: NOSIGNATURE         Explorify v1.6.2 f10-48.jar                       |Explorify                     |explorify                     |1.6.2               |Manifest: NOSIGNATURE         explosiveenhancement-neoforge-1.21.1-1.1.1-client.|Explosive Enhancement         |explosiveenhancement          |1.1.1               |Manifest: NOSIGNATURE         FarmersDelight-1.21.1-1.2.7.jar                   |Farmer's Delight              |farmersdelight                |1.2.7               |Manifest: NOSIGNATURE         FarmersWearableCookingPot-v0.1-1.21.1.jar         |Farmer's Wearable Cooking Pot |farmers_wearable_cooking_pot  |0.1                 |Manifest: NOSIGNATURE         FarmersStructures-1.0.1-1.21.1_neoforge.jar       |FarmersStructures             |farmers_structures            |1.0.0               |Manifest: NOSIGNATURE         ferritecore-7.0.2-neoforge.jar                    |Ferrite Core                  |ferritecore                   |7.0.2               |Manifest: 41:ce:50:66:d1:a0:05:ce:a1:0e:02:85:9b:46:64:e0:bf:2e:cf:60:30:9a:fe:0c:27:e0:63:66:9a:84:ce:8a         flywheel-neoforge-1.21.1-1.0.1-11.jar             |Flywheel                      |flywheel                      |1.0.1-11            |Manifest: NOSIGNATURE         forgeconfigapiport-neoforge-21.1.0.jar            |Forge Config API Port         |forgeconfigapiport            |21.1.0              |Manifest: NOSIGNATURE         forgified-fabric-api-0.107.0+2.0.22+1.21.1.jar    |Forgified Fabric API          |fabric_api                    |0.107.0+2.0.22+1.21.|Manifest: NOSIGNATURE         fabric-api-base-0.4.42+d1308dedd1.jar             |Forgified Fabric API Base     |fabric_api_base               |0.4.42+d1308dedd1   |Manifest: NOSIGNATURE         fabric-api-lookup-api-v1-1.6.69+c21168c319.jar    |Forgified Fabric API Lookup AP|fabric_api_lookup_api_v1      |1.6.69+c21168c319   |Manifest: NOSIGNATURE         fabric-biome-api-v1-13.0.30+1e62d33c19.jar        |Forgified Fabric Biome API (v1|fabric_biome_api_v1           |13.0.30+1e62d33c19  |Manifest: NOSIGNATURE         fabric-block-api-v1-1.0.22+a6e994cd19.jar         |Forgified Fabric Block API (v1|fabric_block_api_v1           |1.0.22+a6e994cd19   |Manifest: NOSIGNATURE         fabric-blockrenderlayer-v1-1.1.52+b089b4bd19.jar  |Forgified Fabric BlockRenderLa|fabric_blockrenderlayer_v1    |1.1.52+b089b4bd19   |Manifest: NOSIGNATURE         fabric-block-view-api-v2-1.0.10+9afaaf8c19.jar    |Forgified Fabric BlockView API|fabric_block_view_api_v2      |1.0.10+9afaaf8c19   |Manifest: NOSIGNATURE         fabric-client-tags-api-v1-1.1.15+e053909619.jar   |Forgified Fabric Client Tags  |fabric_client_tags_api_v1     |1.1.15+e053909619   |Manifest: NOSIGNATURE         fabric-command-api-v2-2.2.28+36d727be19.jar       |Forgified Fabric Command API (|fabric_command_api_v2         |2.2.28+36d727be19   |Manifest: NOSIGNATURE         fabric-content-registries-v0-8.0.17+0a0c14ff19.jar|Forgified Fabric Content Regis|fabric_content_registries_v0  |8.0.17+0a0c14ff19   |Manifest: NOSIGNATURE         fabric-convention-tags-v1-2.1.1+7f945d5b19.jar    |Forgified Fabric Convention Ta|fabric_convention_tags_v1     |2.1.1+7f945d5b19    |Manifest: NOSIGNATURE         fabric-convention-tags-v2-2.9.1+231468e519.jar    |Forgified Fabric Convention Ta|fabric_convention_tags_v2     |2.9.1+231468e519    |Manifest: NOSIGNATURE         fabric-data-attachment-api-v1-1.2.0+7330bc1b19.jar|Forgified Fabric Data Attachme|fabric_data_attachment_api_v1 |1.2.0+7330bc1b19    |Manifest: NOSIGNATURE         fabric-data-generation-api-v1-20.2.22+2d91a6db19.j|Forgified Fabric Data Generati|fabric_data_generation_api_v1 |20.2.22+2d91a6db19  |Manifest: NOSIGNATURE         fabric-entity-events-v1-1.7.0+1af6e62419.jar      |Forgified Fabric Entity Events|fabric_entity_events_v1       |1.7.0+1af6e62419    |Manifest: NOSIGNATURE         fabric-events-interaction-v0-0.7.13+7b71cc1619.jar|Forgified Fabric Events Intera|fabric_events_interaction_v0  |0.7.13+7b71cc1619   |Manifest: NOSIGNATURE         fabric-game-rule-api-v1-1.0.53+36d727be19.jar     |Forgified Fabric Game Rule API|fabric_game_rule_api_v1       |1.0.53+36d727be19   |Manifest: NOSIGNATURE         fabric-gametest-api-v1-2.0.5+29f188ce19.jar       |Forgified Fabric Game Test API|fabric_gametest_api_v1        |2.0.5+29f188ce19    |Manifest: NOSIGNATURE         fabric-item-api-v1-11.1.1+57cdfa8219.jar          |Forgified Fabric Item API (v1)|fabric_item_api_v1            |11.1.1+57cdfa8219   |Manifest: NOSIGNATURE         fabric-item-group-api-v1-4.1.6+e324903319.jar     |Forgified Fabric Item Group AP|fabric_item_group_api_v1      |4.1.6+e324903319    |Manifest: NOSIGNATURE         fabric-key-binding-api-v1-1.0.47+62cc7ce119.jar   |Forgified Fabric Key Binding A|fabric_key_binding_api_v1     |1.0.47+62cc7ce119   |Manifest: NOSIGNATURE         fabric-lifecycle-events-v1-2.4.0+36b6b86a19.jar   |Forgified Fabric Lifecycle Eve|fabric_lifecycle_events_v1    |2.4.0+36b6b86a19    |Manifest: NOSIGNATURE         fabric-loot-api-v2-3.0.15+a3ee712d19.jar          |Forgified Fabric Loot API (v2)|fabric_loot_api_v2            |3.0.15+a3ee712d19   |Manifest: NOSIGNATURE         fabric-loot-api-v3-1.0.3+333dfad919.jar           |Forgified Fabric Loot API (v3)|fabric_loot_api_v3            |1.0.3+333dfad919    |Manifest: NOSIGNATURE         fabric-message-api-v1-6.0.13+e053909619.jar       |Forgified Fabric Message API (|fabric_message_api_v1         |6.0.13+e053909619   |Manifest: NOSIGNATURE         fabric-model-loading-api-v1-2.0.0+a6e994cd19.jar  |Forgified Fabric Model Loading|fabric_model_loading_api_v1   |2.0.0+a6e994cd19    |Manifest: NOSIGNATURE         fabric-networking-api-v1-4.3.0+5c124ecf19.jar     |Forgified Fabric Networking AP|fabric_networking_api_v1      |4.3.0+5c124ecf19    |Manifest: NOSIGNATURE         fabric-object-builder-api-v1-15.2.1+ba60825e19.jar|Forgified Fabric Object Builde|fabric_object_builder_api_v1  |15.2.1+ba60825e19   |Manifest: NOSIGNATURE         fabric-particles-v1-4.0.2+824f924c19.jar          |Forgified Fabric Particles (v1|fabric_particles_v1           |4.0.2+824f924c19    |Manifest: NOSIGNATURE         fabric-recipe-api-v1-5.0.13+59440bcc19.jar        |Forgified Fabric Recipe API (v|fabric_recipe_api_v1          |5.0.13+59440bcc19   |Manifest: NOSIGNATURE         fabric-registry-sync-v0-5.1.3+0c9b5b5419.jar      |Forgified Fabric Registry Sync|fabric_registry_sync_v0       |5.1.3+0c9b5b5419    |Manifest: NOSIGNATURE         fabric-renderer-indigo-1.7.0+acb05a3919.jar       |Forgified Fabric Renderer - In|fabric_renderer_indigo        |1.7.0+acb05a3919    |Manifest: NOSIGNATURE         fabric-renderer-api-v1-3.4.0+acb05a3919.jar       |Forgified Fabric Renderer API |fabric_renderer_api_v1        |3.4.0+acb05a3919    |Manifest: NOSIGNATURE         fabric-rendering-v1-5.0.5+077ba95f19.jar          |Forgified Fabric Rendering (v1|fabric_rendering_v1           |5.0.5+077ba95f19    |Manifest: NOSIGNATURE         fabric-rendering-data-attachment-v1-0.3.48+73761d2|Forgified Fabric Rendering Dat|fabric_rendering_data_attachme|0.3.48+73761d2e19   |Manifest: NOSIGNATURE         fabric-rendering-fluids-v1-3.1.6+857185bc19.jar   |Forgified Fabric Rendering Flu|fabric_rendering_fluids_v1    |3.1.6+857185bc19    |Manifest: NOSIGNATURE         fabric-resource-conditions-api-v1-4.3.0+edeecbd819|Forgified Fabric Resource Cond|fabric_resource_conditions_api|4.3.0+edeecbd819    |Manifest: NOSIGNATURE         fabric-resource-loader-v0-1.3.1+4ea8954419.jar    |Forgified Fabric Resource Load|fabric_resource_loader_v0     |1.3.1+4ea8954419    |Manifest: NOSIGNATURE         fabric-screen-api-v1-2.0.25+b282c4bb19.jar        |Forgified Fabric Screen API (v|fabric_screen_api_v1          |2.0.25+b282c4bb19   |Manifest: NOSIGNATURE         fabric-screen-handler-api-v1-1.3.87+8dbc56dd19.jar|Forgified Fabric Screen Handle|fabric_screen_handler_api_v1  |1.3.87+8dbc56dd19   |Manifest: NOSIGNATURE         fabric-sound-api-v1-1.0.23+10b84f8419.jar         |Forgified Fabric Sound API (v1|fabric_sound_api_v1           |1.0.23+10b84f8419   |Manifest: NOSIGNATURE         fabric-transfer-api-v1-5.4.1+d719f32719.jar       |Forgified Fabric Transfer API |fabric_transfer_api_v1        |5.4.1+d719f32719    |Manifest: NOSIGNATURE         fabric-transitive-access-wideners-v1-6.1.0+0df3143|Forgified Fabric Transitive Ac|fabric_transitive_access_widen|6.1.0+0df3143b19    |Manifest: NOSIGNATURE         ftb-library-neoforge-2101.1.11.jar                |FTB Library                   |ftblibrary                    |2101.1.11           |Manifest: NOSIGNATURE         ftb-quests-neoforge-2101.1.6.jar                  |FTB Quests                    |ftbquests                     |2101.1.6            |Manifest: NOSIGNATURE         ftb-teams-neoforge-2101.1.2.jar                   |FTB Teams                     |ftbteams                      |2101.1.2            |Manifest: NOSIGNATURE         fzzy_config-0.6.5+1.21+neoforge.jar               |Fzzy Config                   |fzzy_config                   |0.6.5+1.21+neoforge |Manifest: NOSIGNATURE         gametechbcs_spellbooks-2.6.5-1.21.1.jar           |GameTechBC's Spellbooks       |gametechbcs_spellbooks        |2.6.5-1.21.1        |Manifest: NOSIGNATURE         GatewaysToEternity-1.21.1-5.0.2.jar               |Gateways To Eternity          |gateways                      |5.0.2               |Manifest: NOSIGNATURE         geckolib-neoforge-1.21.1-4.7.4.jar                |GeckoLib 4                    |geckolib                      |4.7.4               |Manifest: NOSIGNATURE         GlitchCore-neoforge-1.21.1-2.1.0.0.jar            |GlitchCore                    |glitchcore                    |2.1.0.0             |Manifest: NOSIGNATURE         gravelmon-forge-3.0.2.jar                         |Gravelmon                     |gravelmon                     |3.0.2               |Manifest: NOSIGNATURE         gravels_extended_battles-neoforge-1.5.3.jar       |Gravels Extended Battles      |gravels_extended_battles      |1.5.3               |Manifest: NOSIGNATURE         gml-6.0.2.jar                                     |GroovyModLoader               |gml                           |6.0.2               |Manifest: NOSIGNATURE         gtbcs_spell_lib-1.0.1-1.21.1.jar                  |GTBC's SpellLib               |gtbcs_spell_lib               |1.0.1-1.21.1        |Manifest: NOSIGNATURE         guardvillagers-2.3.2-1.21.1.jar                   |Guard Villagers               |guardvillagers                |2.3.2               |Manifest: NOSIGNATURE         handcrafted-neoforge-1.21.1-4.0.2.jar             |Handcrafted                   |handcrafted                   |4.0.2               |Manifest: NOSIGNATURE         Iceberg-1.21.1-neoforge-1.2.9.2.jar               |Iceberg                       |iceberg                       |1.2.9.2             |Manifest: NOSIGNATURE         immersivelanterns-neoforge-1.0.6-1.21.1.jar       |Immersive Lanterns            |immersivelanterns             |1.0.6               |Manifest: NOSIGNATURE         ImmersiveUI-NEOFORGE-0.3.0.jar                    |ImmersiveUI                   |immersiveui                   |0.3.0               |Manifest: NOSIGNATURE         Incendium_1.21.x_v5.4.4.jar                       |Incendium                     |incendium                     |5.4.3               |Manifest: NOSIGNATURE         iris-neoforge-1.8.8+mc1.21.1.jar                  |Iris                          |iris                          |1.8.8+mc1.21.1      |Manifest: NOSIGNATURE         ironchest-1.21-neoforge-16.0.7.jar                |Iron Chests                   |ironchest                     |1.21-neoforge-16.0.7|Manifest: NOSIGNATURE         ironfurnaces-neoforge-1.21.1-4.2.6.jar            |Iron Furnaces                 |ironfurnaces                  |4.2.6               |Manifest: NOSIGNATURE         irons_jewelry-1.21.1-1.0.9.jar                    |Iron's Gems 'n Jewelry        |irons_jewelry                 |1.21.1-1.0.9        |Manifest: NOSIGNATURE         irons_spellbooks-1.21.1-3.9.1.jar                 |Iron's Spells 'n Spellbooks   |irons_spellbooks              |1.21.1-3.9.1        |Manifest: NOSIGNATURE         Jade-1.21.1-NeoForge-15.9.2.jar                   |Jade                          |jade                          |15.9.2+neoforge     |Manifest: NOSIGNATURE         JadeAddons-1.21.1-NeoForge-6.0.1.jar              |Jade Addons                   |jadeaddons                    |0.0NONE             |Manifest: NOSIGNATURE         jamlib-neoforge-1.3.2+1.21.1.jar                  |JamLib                        |jamlib                        |1.3.2+1.21.1        |Manifest: NOSIGNATURE         jei-1.21.1-neoforge-19.21.0.247.jar               |Just Enough Items             |jei                           |19.21.0.247         |Manifest: NOSIGNATURE         JustEnoughResources-NeoForge-1.21.1-1.6.0.13.jar  |Just Enough Resources         |jeresources                   |1.6.0.13            |Manifest: NOSIGNATURE         kffmod-5.7.0.jar                                  |Kotlin For Forge              |kotlinforforge                |5.7.0               |Manifest: NOSIGNATURE         kuma-api-neoforge-21.0.5-SNAPSHOT.jar             |KumaAPI                       |kuma_api                      |21.0.5-SNAPSHOT     |Manifest: NOSIGNATURE         l2archery-3.0.3.jar                               |L2Archery                     |l2archery                     |3.0.3               |Manifest: NOSIGNATURE         l2backpack-3.0.13.jar                             |L2Backpack                    |l2backpack                    |3.0.13              |Manifest: NOSIGNATURE         l2complements-3.0.10.jar                          |L2Complements                 |l2complements                 |3.0.10              |Manifest: NOSIGNATURE         l2core-3.0.8+4.jar                                |L2Core                        |l2core                        |3.0.8+4             |Manifest: NOSIGNATURE         l2damagetracker-3.0.5.jar                         |L2DamageTracker               |l2damagetracker               |3.0.5               |Manifest: NOSIGNATURE         l2itemselector-3.0.8.jar                          |L2ItemSelector                |l2itemselector                |3.0.8               |Manifest: NOSIGNATURE         l2library-3.0.4.jar                               |L2Library                     |l2library                     |3.0.4               |Manifest: NOSIGNATURE         l2menustacker-3.0.9.jar                           |L2MenuStacker                 |l2menustacker                 |3.0.9               |Manifest: NOSIGNATURE         l2tabs-3.0.5+7.jar                                |L2Tabs                        |l2tabs                        |3.0.5+7             |Manifest: NOSIGNATURE         l2weaponry-3.0.4.jar                              |L2Weaponry                    |l2weaponry                    |3.0.4               |Manifest: NOSIGNATURE         L_Ender's Cataclysm-2.58-1.21.1.jar               |L_Ender's Cataclysm           |cataclysm                     |2.58-1.21.1         |Manifest: NOSIGNATURE         laserbridges-1.21.1-neoforge-5.jar                |Laser Bridges & Doors         |laserbridges                  |5                   |Manifest: NOSIGNATURE         letsparkour-1.21.1-1.8.jar                        |Let's Parkour                 |letsparkour                   |1.8                 |Manifest: NOSIGNATURE         libraryferret-neoforge-1.21.1-4.0.0.jar           |Library ferret                |libraryferret                 |4.0.0               |Manifest: NOSIGNATURE         lionfishapi-2.6.jar                               |lionfishapi                   |lionfishapi                   |2.6                 |Manifest: NOSIGNATURE         lithostitched-neoforge-1.21.1-1.4.5.jar           |Lithostitched                 |lithostitched                 |1.4.2               |Manifest: NOSIGNATURE         Loot Beams Refork-neoforge-1.21.1-2.5.11.jar      |Loot Beams Refork             |lootbeams                     |2.5.11              |Manifest: NOSIGNATURE         lootintegrations-1.21-4.2.jar                     |Lootintegrations mod          |lootintegrations              |4.2                 |Manifest: NOSIGNATURE         lootintegrations_cataclysm-1.1.jar                |lootintegrations_cataclysm mod|lootintegrations_cataclysm    |1                   |Manifest: NOSIGNATURE         lootintegrations_ctov-1.3.jar                     |lootintegrations_ctov mod     |lootintegrations_ctov         |1                   |Manifest: NOSIGNATURE         lootintegrations_dnt-2.3.jar                      |lootintegrations_dnt mod      |lootintegrations_dnt          |1                   |Manifest: NOSIGNATURE         lootintegrations_yungs-1.3.jar                    |lootintegrations_yungs mod    |lootintegrations_yungs        |1                   |Manifest: NOSIGNATURE         mcw-bridges-3.0.0-mc1.21.1neoforge.jar            |Macaw's Bridges               |mcwbridges                    |3.0.0               |Manifest: NOSIGNATURE         mcw-doors-1.1.2-mc1.21.1neoforge.jar              |Macaw's Doors                 |mcwdoors                      |1.1.2               |Manifest: NOSIGNATURE         mcw-fences-1.1.2-mc1.21.1neoforge.jar             |Macaw's Fences and Walls      |mcwfences                     |1.1.2               |Manifest: NOSIGNATURE         mcw-furniture-3.3.0-mc1.21.1neoforge.jar          |Macaw's Furniture             |mcwfurnitures                 |3.3.0               |Manifest: NOSIGNATURE         mcw-lights-1.1.1-mc1.21.1neoforge.jar             |Macaw's Lights and Lamps      |mcwlights                     |1.1.1               |Manifest: NOSIGNATURE         mcw-paintings-1.0.5-1.21.1neoforge.jar            |Macaw's Paintings             |mcwpaintings                  |1.0.5               |Manifest: NOSIGNATURE         mcw-paths-1.1.0neoforge-mc1.21.1.jar              |Macaw's Paths and Pavings     |mcwpaths                      |1.1.0               |Manifest: NOSIGNATURE         mcw-roofs-2.3.1-mc1.21.1neoforge.jar              |Macaw's Roofs                 |mcwroofs                      |2.3.1               |Manifest: NOSIGNATURE         mcw-trapdoors-1.1.4-mc1.21.1neoforge.jar          |Macaw's Trapdoors             |mcwtrpdoors                   |1.1.4               |Manifest: NOSIGNATURE         mcw-windows-2.3.0-mc1.21.1neoforge.jar            |Macaw's Windows               |mcwwindows                    |2.3.2               |Manifest: NOSIGNATURE         V6.6-Matmos-mod-1.21.1.jar                        |Matmos ambiant sound          |matmos                        |6.6                 |Manifest: NOSIGNATURE         midnightlib-1.6.9-neoforge+1.21.jar               |MidnightLib                   |midnightlib                   |1.6.9               |Manifest: NOSIGNATURE         client-1.21.1-20240808.144430-srg.jar             |Minecraft                     |minecraft                     |1.21.1              |Manifest: a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f         modernfix-neoforge-5.20.2+mc1.21.1.jar            |ModernFix                     |modernfix                     |5.20.2+mc1.21.1     |Manifest: NOSIGNATURE         moonlight-1.21-2.17.34-neoforge.jar               |Moonlight Lib                 |moonlight                     |1.21-2.17.34        |Manifest: NOSIGNATURE         MouseTweaks-neoforge-mc1.21-2.26.1.jar            |Mouse Tweaks                  |mousetweaks                   |2.26.1              |Manifest: NOSIGNATURE         MythsAndLegends-neoforge-1.7.2-Hotfix.jar         |MythsAndLegends               |mythsandlegends               |1.7.2               |Manifest: NOSIGNATURE         NaturesCompass-1.21.1-3.0.3-neoforge.jar          |Nature's Compass              |naturescompass                |1.21.1-3.0.2-neoforg|Manifest: NOSIGNATURE         neoforge-21.1.133-universal.jar                   |NeoForge                      |neoforge                      |21.1.133            |Manifest: NOSIGNATURE         Nirvana Library-neoforge-1.21.1-1.0.1.jar         |Nirvana Library               |nirvana_lib                   |1.0.1               |Manifest: NOSIGNATURE         nitrogen_internals-1.21.1-1.1.22-neoforge.jar     |Nitrogen                      |nitrogen_internals            |1.1.22              |Manifest: NOSIGNATURE         notenoughcrashes-neoforge-4.4.8+1.21.1.jar        |Not Enough Crashes            |notenoughcrashes              |4.4.8+1.21.1        |Manifest: NOSIGNATURE         notenoughanimations-neoforge-1.9.2-mc1.21.jar     |NotEnoughAnimations           |notenoughanimations           |1.9.2               |Manifest: NOSIGNATURE         OctoLib-NEOFORGE-0.5.0.1.jar                      |OctoLib                       |octolib                       |0.5.0.1             |Manifest: NOSIGNATURE         owo-lib-neoforge-0.12.15-beta.12+1.21.jar         |oωo                           |owo                           |0.12.15-beta.12+1.21|Manifest: NOSIGNATURE         packetfixer-neoforge-2.1.0-1.21-to-1.21.3.jar     |Packet Fixer                  |packetfixer                   |2.1.0               |Manifest: NOSIGNATURE         fallingtrees-neoforge-mc1.21-0.13.2-SNAPSHOT.jar  |Panda's Falling Tree's        |fallingtrees                  |0.13.2              |Manifest: NOSIGNATURE         pandalib-neoforge-mc1.21-0.5.2-SNAPSHOT.jar       |PandaLib                      |pandalib                      |0.5.2               |Manifest: NOSIGNATURE         paraglider-1.0.0-neoforge-1.21.1.jar              |Paraglider                    |paraglider                    |1.0.0               |Manifest: NOSIGNATURE         Patchouli-1.21-88-NEOFORGE.jar                    |Patchouli                     |patchouli                     |1.21-88-NEOFORGE    |Manifest: NOSIGNATURE         Pehkui-3.8.3+1.21-neoforge.jar                    |Pehkui                        |pehkui                        |3.8.3+1.21-neoforge |Manifest: NOSIGNATURE         pet-your-cobblemon-1.3.3.jar                      |Pet Your Cobblemon            |petyourcobblemon              |1.3.3               |Manifest: NOSIGNATURE         Placebo-1.21.1-9.7.0.jar                          |Placebo                       |placebo                       |9.7.0               |Manifest: NOSIGNATURE         player-animation-lib-forge-2.0.1+1.21.1.jar       |Player Animator               |playeranimator                |2.0.1+1.21.1        |Manifest: NOSIGNATURE         Ponder-NeoForge-1.21.1-1.0.0.jar                  |Ponder                        |ponder                        |1.0.0               |Manifest: NOSIGNATURE         prickle-neoforge-1.21.1-21.1.6.jar                |PrickleMC                     |prickle                       |21.1.6              |Manifest: NOSIGNATURE         rctmod-neoforge-1.21.1-0.13.16-beta.jar           |Radical Cobblemon Trainers    |rctmod                        |0.13.16-beta        |Manifest: NOSIGNATURE         rctapi-neoforge-1.21.1-0.10.12-beta.jar           |Radical Cobblemon Trainers API|rctapi                        |0.10.12-beta        |Manifest: NOSIGNATURE         relics-1.21.1-0.10.7.0.jar                        |Relics                        |relics                        |0.10.7.0            |Manifest: NOSIGNATURE         resourcefullib-neoforge-1.21-3.0.11.jar           |Resourceful Lib               |resourcefullib                |3.0.11              |Manifest: NOSIGNATURE         Searchables-neoforge-1.21.1-1.0.2.jar             |Searchables                   |searchables                   |1.0.2               |Manifest: NOSIGNATURE         SereneSeasons-neoforge-1.21.1-10.1.0.3.jar        |Serene Seasons                |sereneseasons                 |10.1.0.3            |Manifest: NOSIGNATURE         voicechat-neoforge-1.21.1-2.5.26.jar              |Simple Voice Chat             |voicechat                     |1.21.1-2.5.26       |Manifest: NOSIGNATURE         SkyVillages-1.0.6-1.21.x-neoforge-release.jar     |Sky Villages                  |skyvillages                   |1.0.6               |Manifest: NOSIGNATURE         smallships-neoforge-1.21.1-2.0.0-b2.1.jar         |Small Ships                   |smallships                    |2.0.0-b2.1          |Manifest: NOSIGNATURE         smarterfarmers-1.21-2.2.2-neoforge.jar            |Smarter Farmers               |smarterfarmers                |1.21-2.2.2          |Manifest: NOSIGNATURE         sodium-neoforge-0.6.9+mc1.21.1.jar                |Sodium                        |sodium                        |0.6.9+mc1.21.1      |Manifest: NOSIGNATURE         sodiumdynamiclights-neoforge-1.0.10-1.21.1.jar    |Sodium Dynamic Lights         |sodiumdynamiclights           |1.0.9               |Manifest: NOSIGNATURE         solarcooker-neoforge-1.21.1-4.2.0.0.jar           |Solar Cooker                  |solarcooker                   |1.21.1-4.2.0.0      |Manifest: NOSIGNATURE         sophisticatedbackpacks-1.21.1-3.24.1.1209.jar     |Sophisticated Backpacks       |sophisticatedbackpacks        |3.24.1              |Manifest: NOSIGNATURE         sophisticatedcore-1.21.1-1.3.2.900.jar            |Sophisticated Core            |sophisticatedcore             |1.3.2               |Manifest: NOSIGNATURE         sound-physics-remastered-neoforge-1.21.1-1.4.8.jar|Sound Physics Remastered      |sound_physics_remastered      |1.21.1-1.4.8        |Manifest: NOSIGNATURE         spectrelib-neoforge-0.17.2+1.21.jar               |SpectreLib                    |spectrelib                    |0.17.2+1.21         |Manifest: NOSIGNATURE         Stellarity-3.0.6.1.jar                            |Stellarity                    |stellarity                    |3.0.6.1             |Manifest: NOSIGNATURE         Storage Drawers-neoforge-1.21-13.8.5.jar          |Storage Drawers               |storagedrawers                |13.8.5              |Manifest: NOSIGNATURE         structureessentials-1.21.1-4.5.jar                |Structure Essentials mod      |structureessentials           |4.5                 |Manifest: NOSIGNATURE         supplementaries-1.21-3.0.41-beta-neoforge.jar     |Supplementaries               |supplementaries               |1.21-3.0.41-beta    |Manifest: NOSIGNATURE         TaxDeepVillager+M.1.21.1+NeoF.2.0.0.jar           |Tax' Deep Villager            |taxdv                         |2.0.0               |Manifest: NOSIGNATURE         TaxOceanVillager+M.1.21.1+NeoF.4.0.1.jar          |Tax' Ocean Villager           |taxov                         |4.0.1               |Manifest: NOSIGNATURE         taxtg-2.0.1-neoforge-1.21.1.jar                   |Tax' Tree Giant               |taxtg                         |2.0.1               |Manifest: NOSIGNATURE         tctcore-1.6-neoforge-1.21.1.jar                   |tctcore                       |tctcore                       |1.6                 |Manifest: NOSIGNATURE         TerraBlender-neoforge-1.21.1-4.1.0.3.jar          |TerraBlender                  |terrablender                  |4.1.0.3             |Manifest: NOSIGNATURE         aether-1.21.1-1.5.5-neoforge.jar                  |The Aether                    |aether                        |1.5.5               |Manifest: NOSIGNATURE         twilightforest-1.21.1-4.6.3003-universal.jar      |The Twilight Forest           |twilightforest                |4.6.3003            |Manifest: NOSIGNATURE         Tomtaru's Cobblemon  Farmer's Delight Tweaks - 1.2|Tomtaru's Cobblemon & Farmer's|tmtcd                         |1.2.0               |Manifest: NOSIGNATURE         twilightdelight-3.0.2.jar                         |Twilight Flavors & Delight    |twilightdelight               |3.0.2               |Manifest: NOSIGNATURE         txnilib-neoforge-1.0.22-1.21.1.jar                |TxniLib                       |txnilib                       |1.0.21              |Manifest: NOSIGNATURE         utility-belt-neoforge-2.6.0+1.21.1.jar            |Utility Belt                  |utility_belt                  |2.6.0+1.21.1        |Manifest: NOSIGNATURE         villagernames-1.21.1-8.2.jar                      |Villager Names                |villagernames                 |8.2                 |Manifest: NOSIGNATURE         Waves-1.21-1.4.1.jar                              |Waves                         |waves                         |1.4.1               |Manifest: NOSIGNATURE         waystones-neoforge-1.21.1-21.1.12.jar             |Waystones                     |waystones                     |21.1.12             |Manifest: NOSIGNATURE         wither_spawn_animation-1.4.2-neoforge-1.21.1.jar  |Wither Spawn Animation        |wither_spawn_animation        |1.4.2               |Manifest: NOSIGNATURE         worldedit-mod-7.3.8.jar                           |WorldEdit                     |worldedit                     |7.3.8+6939-7d32b45  |Manifest: NOSIGNATURE         Xaeros_Minimap_25.1.0_NeoForge_1.21.jar           |Xaero's Minimap               |xaerominimap                  |25.1.0              |Manifest: NOSIGNATURE         XaerosWorldMap_1.39.4_NeoForge_1.21.jar           |Xaero's World Map             |xaeroworldmap                 |1.39.4              |Manifest: NOSIGNATURE         YungsApi-1.21.1-NeoForge-5.1.4.jar                |YUNG's API                    |yungsapi                      |1.21.1-NeoForge-5.1.|Manifest: NOSIGNATURE         YungsBetterDesertTemples-1.21.1-NeoForge-4.1.5.jar|YUNG's Better Desert Temples  |betterdeserttemples           |1.21.1-NeoForge-4.1.|Manifest: NOSIGNATURE         YungsBetterDungeons-1.21.1-NeoForge-5.1.4.jar     |YUNG's Better Dungeons        |betterdungeons                |1.21.1-NeoForge-5.1.|Manifest: NOSIGNATURE         YungsBetterJungleTemples-1.21.1-NeoForge-3.1.2.jar|YUNG's Better Jungle Temples  |betterjungletemples           |1.21.1-NeoForge-3.1.|Manifest: NOSIGNATURE         YungsBetterMineshafts-1.21.1-NeoForge-5.1.1.jar   |YUNG's Better Mineshafts      |bettermineshafts              |1.21.1-NeoForge-5.1.|Manifest: NOSIGNATURE         YungsBetterNetherFortresses-1.21.1-NeoForge-3.1.4.|YUNG's Better Nether Fortresse|betterfortresses              |1.21.1-NeoForge-3.1.|Manifest: NOSIGNATURE         YungsBetterOceanMonuments-1.21.1-NeoForge-4.1.2.ja|YUNG's Better Ocean Monuments |betteroceanmonuments          |1.21.1-NeoForge-4.1.|Manifest: NOSIGNATURE         YungsBetterStrongholds-1.21.1-NeoForge-5.1.3.jar  |YUNG's Better Strongholds     |betterstrongholds             |1.21.1-NeoForge-5.1.|Manifest: NOSIGNATURE         YungsBetterWitchHuts-1.21.1-NeoForge-4.1.1.jar    |YUNG's Better Witch Huts      |betterwitchhuts               |1.21.1-NeoForge-4.1.|Manifest: NOSIGNATURE         YungsBridges-1.21.1-NeoForge-5.1.1.jar            |YUNG's Bridges                |yungsbridges                  |1.21.1-NeoForge-5.1.|Manifest: NOSIGNATURE         YungsExtras-1.21.1-NeoForge-5.1.1.jar             |YUNG's Extras                 |yungsextras                   |1.21.1-NeoForge-5.1.|Manifest: NOSIGNATURE         YungsMenuTweaks-1.21.1-NeoForge-2.1.2.jar         |YUNG's Menu Tweaks            |yungsmenutweaks               |1.21.1-NeoForge-2.1.|Manifest: NOSIGNATURE     Crash Report UUID: 65d247b5-6e52-4529-8858-0086ca899884     FML: 4.0.38     NeoForge: 21.1.133     Flywheel Backend: flywheel:indirect     Suspected Mods: Forgified Fabric Resource Conditions API (v1) (fabric_resource_conditions_api_v1), Forgified Fabric Registry Sync (v0) (fabric_registry_sync_v0)
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.