Jump to content

TileEntities and 1.5.1


mr_crayfish

Recommended Posts

I have been browsing various forums for solutions but seem to have an answer. I just ported my mod from ModLoader 1.5.1 to Forge 7.7.1.616 (1.5.1) (Absolute latest) and I am getting a problem when I load my mod outside a MCP environment. The error has to do something with my class "TileEntityOven" because I tested and removed anything calling it just so it wouldn't load and my mod loaded perfectly but the funny thing is nothing is wrong with my class as all. If you have a solution, please let me know.

 

Error Report:

 


      Minecraft has crashed!      
      ----------------------      

Minecraft has stopped running because it encountered a problem; Failed to start game

A full error report has been saved to C:\Users\Casey\AppData\Roaming\.minecraft\crash-reports\crash-2013-03-29_11.57.40-client.txt - Please include a copy of that file (Not this screen!) if you report this crash to anyone; without it, they will not be able to help fix the crash 



--- BEGIN ERROR REPORT fb095b4f --------
Full report at:
C:\Users\Casey\AppData\Roaming\.minecraft\crash-reports\crash-2013-03-29_11.57.40-client.txt
Please show that file to Mojang, NOT just this screen!

Generated 3/29/13 11:57 AM

-- System Details --
Details:
Minecraft Version: 1.5.1
Operating System: Windows 7 (amd64) version 6.1
Java Version: 1.7.0_17, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 213321744 bytes (203 MB) / 376897536 bytes (359 MB) up to 1888419840 bytes (1800 MB)
JVM Flags: 0 total; 
AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
Suspicious classes: FML and Forge are installed
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v7.44 FML v5.1.10.616 Minecraft Forge 7.7.1.616 4 mods loaded, 4 mods active
mcp [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized
FML [Forge Mod Loader] (coremods) Unloaded->Constructed->Pre-initialized->Initialized
Forge [Minecraft Forge] (coremods) Unloaded->Constructed->Pre-initialized->Initialized
CrayfishFurnitureMod [MrCrayfish's Furniture Mod] (com.zip) Unloaded->Constructed->Pre-initialized->Errored
LWJGL: 2.4.2
OpenGL: AMD Radeon HD 6900 Series GL version 4.2.12002 Compatibility Profile Context 9.12.0.0, ATI Technologies Inc.
Is Modded: Definitely; Client brand changed to 'forge,fml'
Type: Client (map_client.txt)
Texture Pack: textures.zip
Profiler Position: N/A (disabled)
Vec3 Pool Size: ~~ERROR~~ NullPointerException: null

cpw.mods.fml.common.LoaderException: java.lang.NoClassDefFoundError: com/mrcrayfish/furniture/TileEntityOven
at cpw.mods.fml.common.LoadController.transition(LoadController.java:142)
at cpw.mods.fml.common.Loader.initializeMods(Loader.java:690)
at cpw.mods.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:206)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:444)
at net.minecraft.client.MinecraftAppletImpl.func_71384_a(SourceFile:56)
at net.minecraft.client.Minecraft.run(Minecraft.java:729)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: com/mrcrayfish/furniture/TileEntityOven
at com.mrcrayfish.furniture.MrCrayfishFurnitureMod.load(MrCrayfishFurnitureMod.java:229)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:515)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:314)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
at com.google.common.eventbus.EventBus.post(EventBus.java:267)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:165)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:314)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
at com.google.common.eventbus.EventBus.post(EventBus.java:267)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:98)
at cpw.mods.fml.common.Loader.initializeMods(Loader.java:689)
... 5 more
Caused by: java.lang.ClassNotFoundException: com.mrcrayfish.furniture.TileEntityOven
at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:211)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 32 more
Caused by: java.lang.ClassFormatError: Duplicate method name&signature in class file com/mrcrayfish/furniture/TileEntityOven
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:200)
... 34 more
--- END ERROR REPORT b466434e ----------


 

 

TileEntityOven (Ignore some hard coding)

 

package com.mrcrayfish.furniture;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;

public class TileEntityOven extends TileEntity implements ISidedInventory, net.minecraftforge.common.ISidedInventory
{
private ItemStack ovenItemStacks[];
public int ovenCookTime;
public int currentItemCookTime;
public int ovenCookingTime;

public TileEntityOven()
{
	ovenItemStacks = new ItemStack[21];
	ovenCookTime = 0;
	currentItemCookTime = 0;
	ovenCookingTime = 0;
}

public int getSizeInventory()
{
	return ovenItemStacks.length;
}

public ItemStack getStackInSlot(int i)
{
	return ovenItemStacks[i];
}

public ItemStack decrStackSize(int i, int j)
{
	if(ovenItemStacks[i] != null)
	{
		if(ovenItemStacks[i].stackSize <= j)
		{
			ItemStack itemstack = ovenItemStacks[i];
			ovenItemStacks[i] = null;
			return itemstack;
		}
		ItemStack itemstack1 = ovenItemStacks[i].splitStack(j);
		if(ovenItemStacks[i].stackSize == 0)
		{
			ovenItemStacks[i] = null;
		}
		return itemstack1;
	} else
	{
		return null;
	}
}

public ItemStack getStackInSlotOnClosing(int par1)
{
	if (ovenItemStacks[par1] != null)
	{
		ItemStack itemstack = ovenItemStacks[par1];
		ovenItemStacks[par1] = null;
		return itemstack;
	}
	else
	{
		return null;
	}
}

public void setInventorySlotContents(int i, ItemStack itemstack)
{
	this.ovenItemStacks[i] = itemstack;
	if(itemstack != null && itemstack.stackSize > this.getInventoryStackLimit())
	{
		itemstack.stackSize = this.getInventoryStackLimit();
	}
}

public String getInvName()
{
	return "Freezer";
}

public void readFromNBT(NBTTagCompound par1NBTTagCompound)
{
	super.readFromNBT(par1NBTTagCompound);
	NBTTagList nbttaglist = par1NBTTagCompound.getTagList("Items");
	ovenItemStacks = new ItemStack[getSizeInventory()];

	for (int i = 0; i < nbttaglist.tagCount(); i++)
	{
		NBTTagCompound nbttagcompound = (NBTTagCompound)nbttaglist.tagAt(i);
		byte byte0 = nbttagcompound.getByte("Slot");

		if (byte0 >= 0 && byte0 < ovenItemStacks.length)
		{
			ovenItemStacks[byte0] = ItemStack.loadItemStackFromNBT(nbttagcompound);
		}
	}

	ovenCookingTime = par1NBTTagCompound.getShort("CoolTime");
	ovenCookTime = par1NBTTagCompound.getShort("FreezeTime");
	currentItemCookTime = getItemFreezeTime(ovenItemStacks[1]);
}

/**
 * Writes a tile entity to NBT.
 */
public void writeToNBT(NBTTagCompound par1NBTTagCompound)
{
	super.writeToNBT(par1NBTTagCompound);
	par1NBTTagCompound.setShort("CoolTime", (short)ovenCookingTime);
	par1NBTTagCompound.setShort("FreezeTime", (short)ovenCookTime);
	NBTTagList nbttaglist = new NBTTagList();

	for (int i = 0; i < ovenItemStacks.length; i++)
	{
		if (ovenItemStacks[i] != null)
		{
			NBTTagCompound nbttagcompound = new NBTTagCompound();
			nbttagcompound.setByte("Slot", (byte)i);
			ovenItemStacks[i].writeToNBT(nbttagcompound);
			nbttaglist.appendTag(nbttagcompound);
		}
	}

	par1NBTTagCompound.setTag("Items", nbttaglist);
}

public int getInventoryStackLimit()
{
	return 64;
}

public int getCoolProgressScaled(int i)
{
	return (ovenCookingTime * i) / 150;
}

public int getFreezeTimeRemainingScaled(int i)
{
	if(currentItemCookTime == 0)
	{
		currentItemCookTime = 150;
	}
	return (this.ovenCookTime * i) / currentItemCookTime;
}

public boolean isFreezing()
{
	return ovenCookTime > 0;
}

public void updateEntity()
{
	boolean flag = ovenCookTime > 0;
	boolean flag1 = false;

	if (ovenCookTime > 0)
	{
		ovenCookTime--;
	}

	if (!worldObj.isRemote)
	{
		if (ovenCookTime == 0 && canSolidify())
		{
			currentItemCookTime = ovenCookTime = getItemFreezeTime(ovenItemStacks[0]);

			if (ovenCookTime > 0)
			{
				flag1 = true;

				if (ovenItemStacks[0] != null)
				{
					ovenItemStacks[0].stackSize--;

					if (ovenItemStacks[0].stackSize == 0)
					{
						ovenItemStacks[0] = null;
					}
				}
			}
		}

		if (canSolidify())
		{
			ovenCookingTime++;

			if (ovenCookingTime == 150)
			{
				ovenCookingTime = 0;
				solidifyItems();
				flag1 = true;
			}
		}
		else
		{
			ovenCookingTime = 0;
		}

	}
	if (flag != (ovenCookTime > 0))
	{
		flag1 = true;
	}
	if (flag1)
	{
		onInventoryChanged();
	}
}

private boolean canSolidify()
{
	if (this.ovenItemStacks[3] == null && this.ovenItemStacks[6] == null && this.ovenItemStacks[9] == null && this.ovenItemStacks[4] == null && this.ovenItemStacks[7] == null && this.ovenItemStacks[10] == null && this.ovenItemStacks[5] == null && this.ovenItemStacks[8] == null && this.ovenItemStacks[11] == null)
	{
		return false;
	}
	else if (this.ovenItemStacks[3] != null)
	{
		ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[3]);
		if (itemstack == null) return false;
		if (this.ovenItemStacks[12] == null) return true;
		if (!this.ovenItemStacks[12].isItemEqual(itemstack)) return false;
		int result = ovenItemStacks[12].stackSize + itemstack.stackSize;
		return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
	}
	else if (this.ovenItemStacks[6] != null)
	{
		ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[6]);
		if (itemstack == null) return false;
		if (this.ovenItemStacks[15] == null) return true;
		if (!this.ovenItemStacks[15].isItemEqual(itemstack)) return false;
		int result = ovenItemStacks[15].stackSize + itemstack.stackSize;
		return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
	}
	else if (this.ovenItemStacks[9] != null)
	{
		ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[9]);
		if (itemstack == null) return false;
		if (this.ovenItemStacks[18] == null) return true;
		if (!this.ovenItemStacks[18].isItemEqual(itemstack)) return false;
		int result = ovenItemStacks[18].stackSize + itemstack.stackSize;
		return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
	}
	else if (this.ovenItemStacks[4] != null)
	{
		ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[4]);
		if (itemstack == null) return false;
		if (this.ovenItemStacks[13] == null) return true;
		if (!this.ovenItemStacks[13].isItemEqual(itemstack)) return false;
		int result = ovenItemStacks[13].stackSize + itemstack.stackSize;
		return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
	}
	else if (this.ovenItemStacks[7] != null)
	{
		ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[7]);
		if (itemstack == null) return false;
		if (this.ovenItemStacks[16] == null) return true;
		if (!this.ovenItemStacks[16].isItemEqual(itemstack)) return false;
		int result = ovenItemStacks[16].stackSize + itemstack.stackSize;
		return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
	}
	else if (this.ovenItemStacks[10] != null)
	{
		ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[10]);
		if (itemstack == null) return false;
		if (this.ovenItemStacks[19] == null) return true;
		if (!this.ovenItemStacks[19].isItemEqual(itemstack)) return false;
		int result = ovenItemStacks[19].stackSize + itemstack.stackSize;
		return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
	}
	else if (this.ovenItemStacks[5] != null)
	{
		ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[5]);
		if (itemstack == null) return false;
		if (this.ovenItemStacks[14] == null) return true;
		if (!this.ovenItemStacks[14].isItemEqual(itemstack)) return false;
		int result = ovenItemStacks[14].stackSize + itemstack.stackSize;
		return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
	}
	else if (this.ovenItemStacks[8] != null)
	{
		ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[8]);
		if (itemstack == null) return false;
		if (this.ovenItemStacks[17] == null) return true;
		if (!this.ovenItemStacks[17].isItemEqual(itemstack)) return false;
		int result = ovenItemStacks[17].stackSize + itemstack.stackSize;
		return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
	}
	else if (this.ovenItemStacks[11] != null)
	{
		ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[11]);
		if (itemstack == null) return false;
		if (this.ovenItemStacks[20] == null) return true;
		if (!this.ovenItemStacks[20].isItemEqual(itemstack)) return false;
		int result = ovenItemStacks[20].stackSize + itemstack.stackSize;
		return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
	}
	return false;
}

public void solidifyItems()
{
	if(this.canSolidify())
	{

		if (this.ovenItemStacks[3] != null)
		{
			ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[3]);
			if (this.ovenItemStacks[12] == null)
			{
				this.ovenItemStacks[12] = itemstack.copy();
			}
			else if (this.ovenItemStacks[12].isItemEqual(itemstack))
			{
				ovenItemStacks[12].stackSize += itemstack.stackSize;
			}
			--this.ovenItemStacks[3].stackSize;
			if (this.ovenItemStacks[3].stackSize <= 0)
			{
				this.ovenItemStacks[3] = null;
			}
		}
		else if (this.ovenItemStacks[6] != null)
		{
			ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[6]);
			if (this.ovenItemStacks[15] == null)
			{
				this.ovenItemStacks[15] = itemstack.copy();
			}
			else if (this.ovenItemStacks[15].isItemEqual(itemstack))
			{
				ovenItemStacks[15].stackSize += itemstack.stackSize;
			}
			--this.ovenItemStacks[6].stackSize;
			if (this.ovenItemStacks[6].stackSize <= 0)
			{
				this.ovenItemStacks[6] = null;
			}
		}
		else if (this.ovenItemStacks[9] != null)
		{
			ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[9]);
			if (this.ovenItemStacks[18] == null)
			{
				this.ovenItemStacks[18] = itemstack.copy();
			}
			else if (this.ovenItemStacks[18].isItemEqual(itemstack))
			{
				ovenItemStacks[18].stackSize += itemstack.stackSize;
			}
			--this.ovenItemStacks[9].stackSize;
			if (this.ovenItemStacks[9].stackSize <= 0)
			{
				this.ovenItemStacks[9] = null;
			}
		}
		else if (this.ovenItemStacks[4] != null)
		{
			ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[4]);
			if (this.ovenItemStacks[13] == null)
			{
				this.ovenItemStacks[13] = itemstack.copy();
			}
			else if (this.ovenItemStacks[13].isItemEqual(itemstack))
			{
				ovenItemStacks[13].stackSize += itemstack.stackSize;
			}
			--this.ovenItemStacks[4].stackSize;
			if (this.ovenItemStacks[4].stackSize <= 0)
			{
				this.ovenItemStacks[4] = null;
			}
		}
		else if (this.ovenItemStacks[7] != null)
		{
			ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[7]);
			if (this.ovenItemStacks[16] == null)
			{
				this.ovenItemStacks[16] = itemstack.copy();
			}
			else if (this.ovenItemStacks[16].isItemEqual(itemstack))
			{
				ovenItemStacks[16].stackSize += itemstack.stackSize;
			}
			--this.ovenItemStacks[7].stackSize;
			if (this.ovenItemStacks[7].stackSize <= 0)
			{
				this.ovenItemStacks[7] = null;
			}
		}
		else if (this.ovenItemStacks[10] != null)
		{
			ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[10]);
			if (this.ovenItemStacks[19] == null)
			{
				this.ovenItemStacks[19] = itemstack.copy();
			}
			else if (this.ovenItemStacks[19].isItemEqual(itemstack))
			{
				ovenItemStacks[19].stackSize += itemstack.stackSize;
			}
			--this.ovenItemStacks[10].stackSize;
			if (this.ovenItemStacks[10].stackSize <= 0)
			{
				this.ovenItemStacks[10] = null;
			}
		}
		else if (this.ovenItemStacks[5] != null)
		{
			ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[5]);
			if (this.ovenItemStacks[14] == null)
			{
				this.ovenItemStacks[14] = itemstack.copy();
			}
			else if (this.ovenItemStacks[14].isItemEqual(itemstack))
			{
				ovenItemStacks[14].stackSize += itemstack.stackSize;
			}
			--this.ovenItemStacks[5].stackSize;
			if (this.ovenItemStacks[5].stackSize <= 0)
			{
				this.ovenItemStacks[5] = null;
			}
		}
		else if (this.ovenItemStacks[8] != null)
		{
			ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[8]);
			if (this.ovenItemStacks[17] == null)
			{
				this.ovenItemStacks[17] = itemstack.copy();
			}
			else if (this.ovenItemStacks[17].isItemEqual(itemstack))
			{
				ovenItemStacks[17].stackSize += itemstack.stackSize;
			}
			--this.ovenItemStacks[8].stackSize;
			if (this.ovenItemStacks[8].stackSize <= 0)
			{
				this.ovenItemStacks[8] = null;
			}
		}
		else if (this.ovenItemStacks[11] != null)
		{
			ItemStack itemstack = OvenRecipes.cooking().getCookingResult(this.ovenItemStacks[11]);
			if (this.ovenItemStacks[20] == null)
			{
				this.ovenItemStacks[20] = itemstack.copy();
			}
			else if (this.ovenItemStacks[20].isItemEqual(itemstack))
			{
				ovenItemStacks[20].stackSize += itemstack.stackSize;
			}
			--this.ovenItemStacks[11].stackSize;
			if (this.ovenItemStacks[11].stackSize <= 0)
			{
				this.ovenItemStacks[11] = null;
			}
		}
	}
}

private static int getItemFreezeTime(ItemStack itemstack)
{
	return 0;
}

public static boolean isItemFuel(ItemStack itemstack)
{
	return getItemFreezeTime(itemstack) > 0;
}

public boolean isUseableByPlayer(EntityPlayer entityplayer)
{
	return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : entityplayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;
}

public void openChest(){}

public void closeChest(){}

public boolean func_94042_c() 
{
	return false;
}

public boolean isInvNameLocalized() 
{
	return false;
}


public boolean isStackValidForSlot(int var1, ItemStack var2) 
{
	return false;
}

@Override
public int getStartInventorySide(ForgeDirection side) 
{
	return 0;
}

@Override
public int getSizeInventorySide(ForgeDirection side) 
{
	return 0;
}

@Override
public int[] getSizeInventorySide(int var1) {
	// TODO Auto-generated method stub
	return null;
}

@Override
public boolean func_102007_a(int i, ItemStack itemstack, int j) {
	// TODO Auto-generated method stub
	return false;
}

@Override
public boolean func_102008_b(int i, ItemStack itemstack, int j) {
	// TODO Auto-generated method stub
	return false;
}
}

 

Link to comment
Share on other sites

Quite interesting. One of your methods is obfusicating to the same thing as another one.

Mind uploading your pre and post obfusicated class files for me to take a look at?

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

Link to comment
Share on other sites

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.



×
×
  • Create New...

Important Information

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