- 771
- 5
Сделал подобие печки(рецепты такие же, как и обычной печки).
С ванильными рецептами(FurnaceRecipes.class) пашет нормально, но когда создаю свои рецепты(полностью идентичный ванильный), то крашится.
TileEntity:
Рецепты:
Краш:
С ванильными рецептами(FurnaceRecipes.class) пашет нормально, но когда создаю свои рецепты(полностью идентичный ванильный), то крашится.
TileEntity:
Код:
package agravaine.esoteric.tileentity;
import net.minecraft.init.Items;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntityFurnace;
import agravaine.agravainelib.block.tileentity.TileEntityInventoryBase;
import agravaine.agravainelib.item.crafting.CampfireRecipes;
public class TileEntityCampfire extends TileEntityInventoryBase{
public int fuelBurnTime;
public int currentFoodBurnTime;
public int campfireCookTime1;
public int campfireCookTime2;
public static final int FUEL = 1, INPUT_1 = 0, INPUT_2 = 3, OUTPUT_1 = 2, OUTPUT_2 = 4;
public TileEntityCampfire(){
super("Campfire", false, 5);
fuelBurnTime = 0;
currentFoodBurnTime = 0;
campfireCookTime1 = 0;
campfireCookTime2 = 0;
}
public void writeToNBT(NBTTagCompound nbt){
super.writeToNBT(nbt);
nbt.setShort("BurnTime", (short)fuelBurnTime);
nbt.setShort("CookTime1", (short)campfireCookTime1);
nbt.setShort("CookTime2", (short)campfireCookTime2);
}
public void readFromNBT(NBTTagCompound nbt){
super.readFromNBT(nbt);
fuelBurnTime = nbt.getShort("BurnTime");
campfireCookTime1 = nbt.getShort("CookTime1");
campfireCookTime2 = nbt.getShort("CookTime2");
currentFoodBurnTime = getItemBurnTime(inventoryContents[FUEL]);
}
public int getInventoryStackLimit(){
return 6;
}
public int getCookProgressScaled(int i, int j){
int cookingTime;
if(j == 0){
cookingTime = CampfireRecipes.cooking().getCookingTime(inventoryContents[INPUT_1]);
return (campfireCookTime1 * i) / cookingTime;
}else{
cookingTime = CampfireRecipes.cooking().getCookingTime(inventoryContents[INPUT_2]);
return (campfireCookTime2 * i) / cookingTime;
}
}
public int getBurnTimeRemainingScaled(int i){
if(currentFoodBurnTime == 0){
currentFoodBurnTime = 200;
}
return (fuelBurnTime * i) / currentFoodBurnTime;
}
public boolean isBurning(){
return fuelBurnTime > 0;
}
public void updateEntity(){
boolean isBurning = fuelBurnTime > 0;
boolean inventoryChanged = false;
if(fuelBurnTime > 0){
fuelBurnTime--;
}
if(!worldObj.isRemote){
if(fuelBurnTime == 0 && (canCook(0, 2) || canCook(3, 4))){
currentFoodBurnTime = fuelBurnTime = getItemBurnTime(inventoryContents[FUEL]);
if(fuelBurnTime > 0){
onInventoryChanged();
if(inventoryContents[FUEL] != null){
--inventoryContents[FUEL].stackSize;
if(inventoryContents[FUEL].stackSize == 0){
inventoryContents[FUEL] = inventoryContents[FUEL].getItem().getContainerItem(inventoryContents[FUEL]);
}
}
}
}
if(isBurning()){
if(canCook(INPUT_1, OUTPUT_1)){
campfireCookTime1++;
int cookingTime = CampfireRecipes.cooking().getCookingTime(inventoryContents[INPUT_1]);
if(campfireCookTime1 == cookingTime){
campfireCookTime1 = 0;
cookItem(0, 2);
onInventoryChanged();
}
}else{
campfireCookTime1 = 0;
}
if(canCook(INPUT_2, OUTPUT_2)){
campfireCookTime2++;
int cookingTime = CampfireRecipes.cooking().getCookingTime(inventoryContents[INPUT_2]);
if(campfireCookTime2 == cookingTime){
campfireCookTime2 = 0;
cookItem(3, 4);
onInventoryChanged();
}
}else{
campfireCookTime2 = 0;
}
}else{
campfireCookTime1 = 0;
campfireCookTime2 = 0;
}
if(isBurning != (fuelBurnTime > 0)){
onInventoryChanged();
//BlockCampfire.updateCampfireState(furnaceBurnTime > 0, worldObj, xCoord, yCoord, zCoord);
}
}
}
public boolean canCook(int input, int output){
if(inventoryContents[input] == null){
return false;
}
ItemStack itemstack = CampfireRecipes.cooking().getCookingResult(inventoryContents[input]);
if(itemstack == null){
return false;
}
if(inventoryContents[output] == null){
return true;
}
if(!inventoryContents[output].isItemEqual(itemstack)){
return false;
}
if(inventoryContents[output].stackSize + itemstack.stackSize <= getInventoryStackLimit() && inventoryContents[output].stackSize + itemstack.stackSize <= inventoryContents[output].getMaxStackSize()){
return true;
}
return inventoryContents[output].stackSize + itemstack.stackSize <= itemstack.getMaxStackSize();
}
public void cookItem(int input, int output){
if(!canCook(input, output)){
return;
}
ItemStack itemstack = CampfireRecipes.cooking().getCookingResult(inventoryContents[input]);
if(inventoryContents[output] == null){
inventoryContents[output] = itemstack.copy();
}else if(inventoryContents[output].getItem() == itemstack.getItem()){
inventoryContents[output].stackSize += itemstack.stackSize;
}
--inventoryContents[input].stackSize;
if(inventoryContents[input].stackSize <= 0){
inventoryContents[input] = null;
}
}
public static int getItemBurnTime(ItemStack itemstack){
return TileEntityFurnace.getItemBurnTime(itemstack);
}
public static boolean isItemFuel(ItemStack par0ItemStack){
return getItemBurnTime(par0ItemStack) > 0;
}
public boolean isItemValidForSlot(int slotId, ItemStack iStack){
return slotId == OUTPUT_1 || slotId == OUTPUT_2 ? false : slotId == FUEL ? isItemFuel(iStack) : iStack.getItem() instanceof ItemFood;
}
public int[] getAccessibleSlotsFromSide(int slotId){
return slotId == 0 || slotId == 3 ? new int[]{2, 1, 4, 3} : (slotId == 1 ? new int[] {0} : new int[] {1});
}
public boolean canInsertItem(int slotId, ItemStack iStack, int side){
return isItemValidForSlot(slotId, iStack);
}
public boolean canExtractItem(int slotId, ItemStack iStack, int side){
return false;
}
}
Рецепты:
Код:
package agravaine.agravainelib.item.crafting;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemFishFood;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
public class CampfireRecipes{
private static final CampfireRecipes instance = new CampfireRecipes();
private Map<ItemStack, ItemStack> cookingList = new HashMap<ItemStack, ItemStack>();
private Map<ItemStack, Integer> cookingTimeList = new HashMap<ItemStack, Integer>();
public static CampfireRecipes cooking(){
return instance;
}
private CampfireRecipes(){
addRecipe(Items.porkchop, new ItemStack(Items.cooked_porkchop), 250);
addRecipe(Items.beef, new ItemStack(Items.cooked_beef), 250);
addRecipe(Items.chicken, new ItemStack(Items.cooked_chicken), 300);
addRecipe(Items.potato, new ItemStack(Items.baked_potato), 200);
ItemFishFood.FishType[] fishtypes = ItemFishFood.FishType.values();
for(int j = 0; j < fishtypes.length; ++j){
ItemFishFood.FishType fishtype = fishtypes[j];
if(fishtype.func_150973_i()){
addRecipe(new ItemStack(Items.fish, 1, fishtype.func_150976_a()), new ItemStack(Items.cooked_fished, 1, fishtype.func_150976_a()), 320);
}
}
}
public void addRecipe(Item item, ItemStack result, int cookingTime){
addRecipe(new ItemStack(item, 1, 32767), result, cookingTime);
}
public void addRecipe(ItemStack iStack, ItemStack result, int cookingTime){
cookingList.put(iStack, result);
cookingTimeList.put(result, cookingTime);
}
public ItemStack getCookingResult(ItemStack item){
Iterator iterator = cookingList.entrySet().iterator();
Entry entry;
do{
if(!iterator.hasNext()){
return null;
}
entry = (Entry)iterator.next();
}while(!areItemStacksEqual(item, (ItemStack)entry.getKey()));
return (ItemStack)entry.getValue();
}
public int getCookingTime(ItemStack iStack){
Iterator iterator = cookingTimeList.entrySet().iterator();
Entry entry;
do{
if(!iterator.hasNext()){
return 0;
}
entry = (Entry)iterator.next();
}while(!areItemStacksEqual(iStack, (ItemStack)entry.getKey()));
return ((Integer)entry.getValue()).intValue();
}
private boolean areItemStacksEqual(ItemStack itemStackOne, ItemStack itemStackTwo){
return itemStackTwo.getItem() == itemStackOne.getItem() && (itemStackTwo.getItemDamage() == 32767 || itemStackTwo.getItemDamage() == itemStackOne.getItemDamage());
}
public Map<ItemStack, ItemStack> getSmeltingList(){
return cookingList;
}
}
Код:
[18:47:36] [Client thread/FATAL]: Reported exception thrown!
net.minecraft.util.ReportedException: Rendering screen
at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1176) ~[EntityRenderer.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1024) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:912) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:112) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_55]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_55]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_55]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_55]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?]
Caused by: java.lang.NullPointerException
at agravaine.agravainelib.item.crafting.CampfireRecipes.areItemStacksEqual(CampfireRecipes.java:74) ~[CampfireRecipes.class:?]
at agravaine.agravainelib.item.crafting.CampfireRecipes.getCookingTime(CampfireRecipes.java:69) ~[CampfireRecipes.class:?]
at agravaine.esoteric.tileentity.TileEntityCampfire.getCookProgressScaled(TileEntityCampfire.java:50) ~[TileEntityCampfire.class:?]
at agravaine.esoteric.client.gui.GuiCampfire.drawGuiContainerBackgroundLayer(GuiCampfire.java:43) ~[GuiCampfire.class:?]
at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:97) ~[GuiContainer.class:?]
at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1145) ~[EntityRenderer.class:?]
... 9 more
---- Minecraft Crash Report ----
// Hi. I'm Minecraft, and I'm a crashaholic.
Time: 08.06.14 18:47
Description: Rendering screen
java.lang.NullPointerException: Rendering screen
at agravaine.agravainelib.item.crafting.CampfireRecipes.areItemStacksEqual(CampfireRecipes.java:74)
at agravaine.agravainelib.item.crafting.CampfireRecipes.getCookingTime(CampfireRecipes.java:69)
at agravaine.esoteric.tileentity.TileEntityCampfire.getCookProgressScaled(TileEntityCampfire.java:50)
at agravaine.esoteric.client.gui.GuiCampfire.drawGuiContainerBackgroundLayer(GuiCampfire.java:43)
at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:97)
at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1145)
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1024)
at net.minecraft.client.Minecraft.run(Minecraft.java:912)
at net.minecraft.client.main.Main.main(Main.java:112)
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 net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Stacktrace:
at agravaine.agravainelib.item.crafting.CampfireRecipes.areItemStacksEqual(CampfireRecipes.java:74)
at agravaine.agravainelib.item.crafting.CampfireRecipes.getCookingTime(CampfireRecipes.java:69)
at agravaine.esoteric.tileentity.TileEntityCampfire.getCookProgressScaled(TileEntityCampfire.java:50)
at agravaine.esoteric.client.gui.GuiCampfire.drawGuiContainerBackgroundLayer(GuiCampfire.java:43)
at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:97)
-- Screen render details --
Details:
Screen name: agravaine.esoteric.client.gui.GuiCampfire
Mouse location: Scaled: (213, 119). Absolute: (427, 240)
Screen size: Scaled: (427, 240). Absolute: (854, 480). Scale factor of 2
-- Affected level --
Details:
Level name: MpServer
All players: 1 total; [EntityClientPlayerMP['Player32'/155, l='MpServer', x=983,98, y=5,62, z=-988,11]]
Chunk stats: MultiplayerChunkCache: 225, 225
Level seed: 0
Level generator: ID 01 - flat, ver 0. Features enabled: false
Level generator options:
Level spawn location: World: (991,4,-981), Chunk: (at 15,0,11 in 61,-62; contains blocks 976,0,-992 to 991,255,-977), Region: (1,-2; contains chunks 32,-64 to 63,-33, blocks 512,0,-1024 to 1023,255,-513)
Level time: 36766 game time, 11181 day time
Level dimension: 0
Level storage version: 0x00000 - Unknown?
Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
Forced entities: 52 total; [EntitySheep['Sheep'/139, l='MpServer', x=1065,13, y=4,00, z=-921,81], EntityCow['Cow'/144, l='MpServer', x=1065,75, y=4,00, z=-912,75], EntityHorse['Horse'/38, l='MpServer', x=915,94, y=4,00, z=-1033,06], EntityHorse['Horse'/39, l='MpServer', x=917,22, y=4,00, z=-1036,00], EntityHorse['Horse'/37, l='MpServer', x=924,84, y=4,00, z=-1030,75], EntityCow['Cow'/42, l='MpServer', x=928,75, y=4,00, z=-1042,25], EntityChicken['Chicken'/43, l='MpServer', x=934,59, y=4,00, z=-1053,44], EntitySheep['Sheep'/40, l='MpServer', x=919,84, y=4,00, z=-909,16], EntityCow['Cow'/46, l='MpServer', x=941,69, y=4,00, z=-950,22], EntitySheep['Sheep'/47, l='MpServer', x=941,97, y=4,00, z=-916,09], EntityChicken['Chicken'/44, l='MpServer', x=941,63, y=4,00, z=-1053,63], EntityPig['Pig'/45, l='MpServer', x=942,81, y=4,00, z=-1000,94], EntitySheep['Sheep'/51, l='MpServer', x=939,25, y=4,00, z=-909,78], EntitySheep['Sheep'/54, l='MpServer', x=933,97, y=4,00, z=-910,03], EntityPig['Pig'/53, l='MpServer', x=943,94, y=4,00, z=-910,94], EntityChicken['Chicken'/63, l='MpServer', x=949,44, y=4,00, z=-1060,38], EntityChicken['Chicken'/62, l='MpServer', x=957,41, y=4,00, z=-1059,41], EntityCow['Cow'/68, l='MpServer', x=949,84, y=4,00, z=-1049,75], EntityHorse['Horse'/69, l='MpServer', x=952,38, y=4,00, z=-1051,91], EntityChicken['Chicken'/70, l='MpServer', x=949,44, y=4,00, z=-1052,59], EntityPig['Pig'/71, l='MpServer', x=944,19, y=4,00, z=-995,41], EntityChicken['Chicken'/64, l='MpServer', x=952,31, y=4,00, z=-1049,56], EntityChicken['Chicken'/65, l='MpServer', x=945,56, y=4,00, z=-1057,38], EntityChicken['Chicken'/66, l='MpServer', x=958,41, y=4,00, z=-1046,59], EntityCow['Cow'/67, l='MpServer', x=941,13, y=4,00, z=-1041,03], EntityHorse['Horse'/77, l='MpServer', x=959,94, y=4,00, z=-911,03], EntityCow['Cow'/72, l='MpServer', x=953,03, y=4,00, z=-1001,03], EntityCow['Cow'/73, l='MpServer', x=944,56, y=4,00, z=-993,75], EntityPig['Pig'/74, l='MpServer', x=954,94, y=4,00, z=-974,09], EntityCow['Cow'/93, l='MpServer', x=961,06, y=4,00, z=-1008,94], EntityPig['Pig'/92, l='MpServer', x=965,91, y=4,00, z=-1015,31], EntitySheep['Sheep'/95, l='MpServer', x=960,13, y=4,00, z=-1011,06], EntityPig['Pig'/94, l='MpServer', x=964,91, y=4,00, z=-1017,16], EntityHorse['Horse'/89, l='MpServer', x=975,09, y=4,00, z=-1065,63], EntitySheep['Sheep'/88, l='MpServer', x=969,97, y=4,00, z=-1063,09], EntityHorse['Horse'/90, l='MpServer', x=966,53, y=4,00, z=-1062,84], EntityCow['Cow'/100, l='MpServer', x=964,16, y=4,00, z=-941,06], EntityCow['Cow'/98, l='MpServer', x=962,97, y=4,00, z=-949,06], EntityCow['Cow'/99, l='MpServer', x=961,22, y=4,00, z=-930,66], EntityPig['Pig'/96, l='MpServer', x=956,13, y=4,00, z=-1006,66], EntityCow['Cow'/97, l='MpServer', x=971,31, y=4,00, z=-976,25], EntityHorse['Horse'/110, l='MpServer', x=990,22, y=4,00, z=-1040,06], EntitySheep['Sheep'/111, l='MpServer', x=978,69, y=4,00, z=-1054,22], EntitySheep['Sheep'/108, l='MpServer', x=978,03, y=4,00, z=-1057,44], EntitySheep['Sheep'/109, l='MpServer', x=983,16, y=4,00, z=-1054,84], EntitySheep['Sheep'/115, l='MpServer', x=990,09, y=4,00, z=-930,03], EntitySheep['Sheep'/114, l='MpServer', x=977,84, y=4,00, z=-933,09], EntityCow['Cow'/113, l='MpServer', x=988,22, y=4,00, z=-1011,78], EntityPig['Pig'/112, l='MpServer', x=981,19, y=4,00, z=-1025,03], EntityClientPlayerMP['Player32'/155, l='MpServer', x=983,98, y=5,62, z=-988,11], EntitySheep['Sheep'/122, l='MpServer', x=1008,84, y=4,00, z=-931,81], EntityCow['Cow'/121, l='MpServer', x=1015,88, y=4,00, z=-1000,03]]
Retry entities: 0 total; []
Server brand: fml,forge
Server type: Integrated singleplayer server
Stacktrace:
at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:412)
at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2523)
at net.minecraft.client.Minecraft.run(Minecraft.java:934)
at net.minecraft.client.main.Main.main(Main.java:112)
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 net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
-- System Details --
Details:
Minecraft Version: 1.7.2
Operating System: Windows XP (x86) version 5.1
Java Version: 1.7.0_55, Oracle Corporation
Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation
Memory: 941694344 bytes (898 MB) / 1060372480 bytes (1011 MB) up to 1060372480 bytes (1011 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
AABB Pool Size: 11127 (623112 bytes; 0 MB) allocated, 908 (50848 bytes; 0 MB) used
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v9.03 FML v7.2.209.1112 Minecraft Forge 10.12.1.1112 5 mods loaded, 5 mods active
mcp{9.03} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
FML{7.2.209.1112} [Forge Mod Loader] (forgeSrc-1.7.2-10.12.1.1112.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
Forge{10.12.1.1112} [Minecraft Forge] (forgeSrc-1.7.2-10.12.1.1112.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
AgravaineLib{0.12} [AgravaineLib] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
Esoteric{Alpha Alpha 0.03} [Esoteric] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
Launched Version: 1.6
LWJGL: 2.9.0
OpenGL: GeForce 6100 nForce 405/PCI/SSE2/3DNOW! GL version 2.0.3, NVIDIA Corporation
Is Modded: Definitely; Client brand changed to 'fml,forge'
Type: Client (map_client.txt)
Resource Packs: []
Current Language: English (US)
Profiler Position: N/A (disabled)
Vec3 Pool Size: 1306 (73136 bytes; 0 MB) allocated, 157 (8792 bytes; 0 MB) used
Anisotropic Filtering: Off (1)
#@!@# Game crashed! Crash report saved to: #@!@# C:\Modding\Forge\eclipse\.\crash-reports\crash-2014-06-08_18.47.36-client.txt
AL lib: (EE) alc_cleanup: 1 device not closed