Skip to content

Commit

Permalink
Fix rare race-related crash in SSP
Browse files Browse the repository at this point in the history
  • Loading branch information
jaquadro committed Sep 7, 2015
1 parent 56a7f16 commit 7808958
Show file tree
Hide file tree
Showing 12 changed files with 106 additions and 16 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ repositories {

apply plugin: 'forge'

version = "1.7.10-1.6.5"
version = "1.7.10-1.6.6"
group= "com.jaquadro.gardenstuff" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "GardenStuff"

Expand Down
3 changes: 2 additions & 1 deletion src/com/jaquadro/minecraft/gardencore/GardenCore.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public class GardenCore
@Mod.Instance(MOD_ID)
public static GardenCore instance;

@SidedProxy(clientSide = SOURCE_PATH + "core.ClientProxy", serverSide = SOURCE_PATH + "core.CommonProxy")
@SidedProxy(clientSide = SOURCE_PATH + "core.ClientProxy", serverSide = SOURCE_PATH + "core.ServerProxy")
public static CommonProxy proxy;

@Mod.EventHandler
Expand All @@ -57,6 +57,7 @@ public void init (FMLInitializationEvent event) {

@Mod.EventHandler
public void postInit (FMLPostInitializationEvent event) {
proxy.postInit();
integration.postInit();
recipes.init();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ public class BlockGardenProxy extends Block implements IPlantProxy

// Scratch State
private boolean applyingBonemeal;
private BindingStack binding = new BindingStack();

// Reentrant Flags
private int reeLightValue;
Expand Down Expand Up @@ -83,11 +82,11 @@ public void bindSlot (World world, int x, int y, int z, TileEntityGarden te, int
if (getPlantBlock(te, slot) != null)
data = getPlantData(te, slot);

binding.bind(world, x, y, z, slot, data);
GardenCore.proxy.getBindingStack(this).bind(world, x, y, z, slot, data);
}

public void unbindSlot (World world, int x, int y, int z, TileEntityGarden te) {
binding.unbind(world, x, y, z);
GardenCore.proxy.getBindingStack(this).unbind(world, x, y, z);
}

@Override
Expand Down Expand Up @@ -524,7 +523,7 @@ public void randomDisplayTick (World world, int x, int y, int z, Random random)
@SideOnly(Side.CLIENT)
@Override
public int colorMultiplier (IBlockAccess blockAccess, int x, int y, int z) {
int slot = binding.getSlot();
int slot = GardenCore.proxy.getBindingStack(this).getSlot();
TileEntityGarden te = getGardenEntity(blockAccess, x, y, z);
if (te == null || slot == -1)
return super.colorMultiplier(blockAccess, x, y, z);
Expand All @@ -544,7 +543,7 @@ public int colorMultiplier (IBlockAccess blockAccess, int x, int y, int z) {
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon (IBlockAccess blockAccess, int x, int y, int z, int side) {
int slot = binding.getSlot();
int slot = GardenCore.proxy.getBindingStack(this).getSlot();
TileEntityGarden te = getGardenEntity(blockAccess, x, y, z);
if (te == null || slot == -1)
return super.getIcon(blockAccess, x, y, z, side);
Expand Down
13 changes: 11 additions & 2 deletions src/com/jaquadro/minecraft/gardencore/core/ClientProxy.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.jaquadro.minecraft.gardencore.core;

import com.jaquadro.minecraft.gardencore.client.renderer.*;
import com.jaquadro.minecraft.gardencore.util.BindingStack;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.item.Item;
import net.minecraftforge.client.MinecraftForgeClient;

import java.util.HashMap;
import java.util.Map;

public class ClientProxy extends CommonProxy
{
Expand All @@ -18,6 +20,8 @@ public class ClientProxy extends CommonProxy
public static ISimpleBlockRenderingHandler smallFireRenderer;
public static ISimpleBlockRenderingHandler compostBinRenderer;

private Map<Object, BindingStack> bindingStacks = new HashMap<Object, BindingStack>();

@Override
public void registerRenderers ()
{
Expand All @@ -33,4 +37,9 @@ public void registerRenderers ()
RenderingRegistry.registerBlockHandler(smallFireRenderID, smallFireRenderer);
RenderingRegistry.registerBlockHandler(compostBinRenderID, compostBinRenderer);
}

@Override
protected Map<Object, BindingStack> getBindingRegistry () {
return bindingStacks;
}
}
20 changes: 19 additions & 1 deletion src/com/jaquadro/minecraft/gardencore/core/CommonProxy.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,26 @@
package com.jaquadro.minecraft.gardencore.core;

public class CommonProxy
import com.jaquadro.minecraft.gardencore.util.BindingStack;

import java.util.Map;

public abstract class CommonProxy
{
public void registerRenderers ()
{ }

public void postInit () {
registerBindingStack(ModBlocks.gardenProxy);
}

protected abstract Map<Object, BindingStack> getBindingRegistry ();

public void registerBindingStack (Object object) {
getBindingRegistry().put(object, new BindingStack());
}

public BindingStack getBindingStack (Object object) {
return getBindingRegistry().get(object);
}
}

16 changes: 16 additions & 0 deletions src/com/jaquadro/minecraft/gardencore/core/ServerProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.jaquadro.minecraft.gardencore.core;

import com.jaquadro.minecraft.gardencore.util.BindingStack;

import java.util.HashMap;
import java.util.Map;

public class ServerProxy extends CommonProxy
{
private Map<Object, BindingStack> bindingStacks = new HashMap<Object, BindingStack>();

@Override
protected Map<Object, BindingStack> getBindingRegistry () {
return bindingStacks;
}
}
1 change: 1 addition & 0 deletions src/com/jaquadro/minecraft/gardenstuff/GardenStuff.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public void init (FMLInitializationEvent event) {

@Mod.EventHandler
public void postInit (FMLPostInitializationEvent event) {
proxy.postInit();
recipes.init();
integration.postInit();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,6 @@ public class BlockLantern extends BlockContainer implements IInfusionStabiliser
@SideOnly(Side.CLIENT)
private IIcon iconCandle;

public BindingStack binding = new BindingStack();

public BlockLantern (String blockName) {
super(Material.iron);

Expand Down
11 changes: 11 additions & 0 deletions src/com/jaquadro/minecraft/gardenstuff/core/ClientProxy.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package com.jaquadro.minecraft.gardenstuff.core;

import com.jaquadro.minecraft.gardencore.util.BindingStack;
import com.jaquadro.minecraft.gardenstuff.renderer.*;
import com.jaquadro.minecraft.gardenstuff.renderer.item.LanternItemRenderer;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.item.Item;
import net.minecraftforge.client.MinecraftForgeClient;

import java.util.HashMap;
import java.util.Map;

public class ClientProxy extends CommonProxy
{
public static int heavyChainRenderID;
Expand All @@ -16,6 +20,8 @@ public class ClientProxy extends CommonProxy

public static LanternRenderer lanternRenderer;

private Map<Object, BindingStack> bindingStacks = new HashMap<Object, BindingStack>();

@Override
public void registerRenderers () {
heavyChainRenderID = RenderingRegistry.getNextAvailableRenderId();
Expand All @@ -34,4 +40,9 @@ public void registerRenderers () {

MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.lantern), new LanternItemRenderer());
}

@Override
protected Map<Object, BindingStack> getBindingRegistry () {
return bindingStacks;
}
}
20 changes: 19 additions & 1 deletion src/com/jaquadro/minecraft/gardenstuff/core/CommonProxy.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,25 @@
package com.jaquadro.minecraft.gardenstuff.core;

public class CommonProxy
import com.jaquadro.minecraft.gardencore.util.BindingStack;

import java.util.Map;

public abstract class CommonProxy
{
public void registerRenderers ()
{ }

public void postInit () {
registerBindingStack(ModBlocks.lantern);
}

protected abstract Map<Object, BindingStack> getBindingRegistry ();

public void registerBindingStack (Object object) {
getBindingRegistry().put(object, new BindingStack());
}

public BindingStack getBindingStack (Object object) {
return getBindingRegistry().get(object);
}
}
16 changes: 16 additions & 0 deletions src/com/jaquadro/minecraft/gardenstuff/core/ServerProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.jaquadro.minecraft.gardenstuff.core;

import com.jaquadro.minecraft.gardencore.util.BindingStack;

import java.util.HashMap;
import java.util.Map;

public class ServerProxy extends CommonProxy
{
private Map<Object, BindingStack> bindingStacks = new HashMap<Object, BindingStack>();

@Override
protected Map<Object, BindingStack> getBindingRegistry () {
return bindingStacks;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import com.jaquadro.minecraft.gardenapi.api.connect.IAttachable;
import com.jaquadro.minecraft.gardenapi.internal.Api;
import com.jaquadro.minecraft.gardenapi.api.connect.IChainSingleAttachable;
import com.jaquadro.minecraft.gardencore.util.BindingStack;
import com.jaquadro.minecraft.gardencore.util.RenderHelper;
import com.jaquadro.minecraft.gardenstuff.GardenStuff;
import com.jaquadro.minecraft.gardenstuff.block.BlockLantern;
import com.jaquadro.minecraft.gardenstuff.block.tile.TileEntityLantern;
import com.jaquadro.minecraft.gardenstuff.core.ClientProxy;
Expand Down Expand Up @@ -53,8 +55,9 @@ private boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, Block

TileEntityLantern tile = block.getTileEntity(world, x, y, z);
if (tile != null) {
block.binding.setDefaultMeta(world.getBlockMetadata(x, y, z));
block.binding.bind(tile.getWorldObj(), x, y, z, 0, tile.getLightSourceMeta());
BindingStack binding = GardenStuff.proxy.getBindingStack(block);
binding.setDefaultMeta(world.getBlockMetadata(x, y, z));
binding.bind(tile.getWorldObj(), x, y, z, 0, tile.getLightSourceMeta());
Tessellator.instance.addTranslation(0, .001f, 0);

if (tile.getLightSource() != null) {
Expand All @@ -64,7 +67,7 @@ private boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, Block
}

Tessellator.instance.addTranslation(0, -.001f, 0);
block.binding.unbind(tile.getWorldObj(), x, y, z);
binding.unbind(tile.getWorldObj(), x, y, z);
}

renderChain(world, renderer, block, x, y, z);
Expand Down

0 comments on commit 7808958

Please sign in to comment.