From b68a081350499eb42a78938c409fa6bbb81af275 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emmanuel=20Beno=C3=AEt?= <tseeker@nocternity.net>
Date: Wed, 22 Jun 2016 15:34:20 +0200
Subject: [PATCH] Alloy furnace - More reliance on vanilla TE updates

---
 alloy-furnace-gui-1.xcf                       | Bin 43441 -> 43441 bytes
 .../tech/base/TBAlloyFurnaceContainer.java    |   7 +-
 .../mmm/tech/base/TBAlloyFurnaceMessage.java  |  34 +-------
 .../tech/base/TBAlloyFurnaceTileEntity.java   |  78 ++++++++++++++++--
 src/java/mmm/tech/base/TechBase.java          |   1 -
 .../mmm/textures/gui/alloy_furnace_1.png      | Bin 2169 -> 2172 bytes
 6 files changed, 77 insertions(+), 43 deletions(-)

diff --git a/alloy-furnace-gui-1.xcf b/alloy-furnace-gui-1.xcf
index d6135f55b7a310e0bc567b468feccc447445241e..04a727648244b8c28d90dc93a4292a2a5bc33d31 100644
GIT binary patch
delta 89
zcmdmZnQ7x?rU`b8K^yJe85vVHw=@1@nq1FOF!?QuhN=<+1PA~r5N2UuU^PP(V|CkX
a#rl+qndLv%WF?N+$xk_RHh<>Ww*UaxEfq-s

delta 101
zcmdmZnQ7x?rU`b8b{p;885v_Xw=@1@n*5YAWAaxP4NWNq2oL~LAk4zRz^aET#%c%R
kPqtx`+MK|8oQawFKlfxUj@ZeqECrJvh_Y<{%&~6)0J_~5ssI20

diff --git a/src/java/mmm/tech/base/TBAlloyFurnaceContainer.java b/src/java/mmm/tech/base/TBAlloyFurnaceContainer.java
index d9d05b8..afb7df7 100644
--- a/src/java/mmm/tech/base/TBAlloyFurnaceContainer.java
+++ b/src/java/mmm/tech/base/TBAlloyFurnaceContainer.java
@@ -5,7 +5,6 @@ import mmm.materials.MAlloyRecipe;
 import mmm.utils.UContainers;
 import mmm.utils.UInventoryDisplay;
 import mmm.utils.UInventoryGrid;
-import mmm.utils.URegistry;
 import mmm.utils.slots.USDisplay;
 import mmm.utils.slots.USFuel;
 import mmm.utils.slots.USOutput;
@@ -84,9 +83,8 @@ public class TBAlloyFurnaceContainer
 
 	public void setCurrentRecipe( final ResourceLocation name , final boolean confirm )
 	{
-		MAlloyRecipe recipe = MAlloyRecipe.REGISTRY.getRecipe( name );
+		final MAlloyRecipe recipe = MAlloyRecipe.REGISTRY.getRecipe( name );
 		if ( recipe == null ) {
-			// XXX log
 			return;
 		}
 
@@ -97,8 +95,7 @@ public class TBAlloyFurnaceContainer
 		this.recipe.setInventorySlotContents( 6 , recipe.output );
 
 		if ( confirm ) {
-			this.tileEntity.recipe = recipe;
-			URegistry.network.sendToAll( new TBAlloyFurnaceMessage( this.position , name , true ) );
+			this.tileEntity.setRecipe( name );
 		}
 	}
 
diff --git a/src/java/mmm/tech/base/TBAlloyFurnaceMessage.java b/src/java/mmm/tech/base/TBAlloyFurnaceMessage.java
index 7652d40..1dbd387 100644
--- a/src/java/mmm/tech/base/TBAlloyFurnaceMessage.java
+++ b/src/java/mmm/tech/base/TBAlloyFurnaceMessage.java
@@ -2,18 +2,12 @@ package mmm.tech.base;
 
 
 import io.netty.buffer.ByteBuf;
-import mmm.materials.MAlloyRecipe;
 import mmm.utils.I_UMessage;
-import net.minecraft.client.entity.EntityPlayerSP;
 import net.minecraft.entity.player.EntityPlayerMP;
 import net.minecraft.inventory.Container;
-import net.minecraft.tileentity.TileEntity;
 import net.minecraft.util.ResourceLocation;
 import net.minecraft.util.math.BlockPos;
-import net.minecraft.world.World;
 import net.minecraftforge.fml.common.network.ByteBufUtils;
-import net.minecraftforge.fml.relauncher.Side;
-import net.minecraftforge.fml.relauncher.SideOnly;
 
 
 
@@ -60,36 +54,14 @@ public class TBAlloyFurnaceMessage
 	}
 
 
-	@Override
-	@SideOnly( Side.CLIENT )
-	public void handleOnClient( final EntityPlayerSP player )
-	{
-		World world = player.getEntityWorld( );
-		TileEntity te = world.getTileEntity( this.blockPos );
-		if ( ! ( te instanceof TBAlloyFurnaceTileEntity ) ) {
-			return;
-		}
-
-		TBAlloyFurnaceTileEntity afte = (TBAlloyFurnaceTileEntity) te;
-		MAlloyRecipe recipe = MAlloyRecipe.REGISTRY.getRecipe( selected );
-		if ( recipe == null ) {
-			recipe = MAlloyRecipe.REGISTRY.getRecipes( ).get( 0 );
-		}
-		afte.recipe = recipe;
-	}
-
-
 	@Override
 	public void handleOnServer( final EntityPlayerMP player )
 	{
 		final Container curCont = player.openContainer;
-		if ( ! ( curCont instanceof TBAlloyFurnaceContainer ) ) {
-			// XXX log?
-			return;
+		if ( curCont instanceof TBAlloyFurnaceContainer ) {
+			final TBAlloyFurnaceContainer container = (TBAlloyFurnaceContainer) curCont;
+			container.setCurrentRecipe( this.selected , this.confirm );
 		}
-
-		final TBAlloyFurnaceContainer container = (TBAlloyFurnaceContainer) curCont;
-		container.setCurrentRecipe( this.selected , this.confirm );
 	}
 
 }
diff --git a/src/java/mmm/tech/base/TBAlloyFurnaceTileEntity.java b/src/java/mmm/tech/base/TBAlloyFurnaceTileEntity.java
index 9cd0a86..9a8fa56 100644
--- a/src/java/mmm/tech/base/TBAlloyFurnaceTileEntity.java
+++ b/src/java/mmm/tech/base/TBAlloyFurnaceTileEntity.java
@@ -3,7 +3,10 @@ package mmm.tech.base;
 
 import mmm.materials.MAlloyRecipe;
 import mmm.utils.UInventoryGrid;
+import net.minecraft.block.state.IBlockState;
 import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.NetworkManager;
+import net.minecraft.network.play.server.SPacketUpdateTileEntity;
 import net.minecraft.tileentity.TileEntity;
 import net.minecraft.util.ResourceLocation;
 import net.minecraftforge.common.util.Constants.NBT;
@@ -17,6 +20,7 @@ public class TBAlloyFurnaceTileEntity
 	public final UInventoryGrid input;
 	public final UInventoryGrid fuel;
 	public final UInventoryGrid output;
+
 	public MAlloyRecipe recipe;
 
 
@@ -36,11 +40,7 @@ public class TBAlloyFurnaceTileEntity
 		this.input.deserializeNBT( compound.getTagList( "Input" , NBT.TAG_COMPOUND ) );
 		this.fuel.deserializeNBT( compound.getTagList( "Fuel" , NBT.TAG_COMPOUND ) );
 		this.output.deserializeNBT( compound.getTagList( "Output" , NBT.TAG_COMPOUND ) );
-		String recipeName = compound.getString( "Recipe" );
-		this.recipe = MAlloyRecipe.REGISTRY.getRecipe( new ResourceLocation( recipeName ) );
-		if ( this.recipe == null ) {
-			this.recipe = MAlloyRecipe.REGISTRY.getRecipes( ).get( 0 );
-		}
+		this.readSyncData( compound );
 	}
 
 
@@ -51,8 +51,74 @@ public class TBAlloyFurnaceTileEntity
 		compound.setTag( "Input" , this.input.serializeNBT( ) );
 		compound.setTag( "Fuel" , this.fuel.serializeNBT( ) );
 		compound.setTag( "Output" , this.output.serializeNBT( ) );
-		compound.setString( "Recipe" , this.recipe.name.toString( ) );
+		this.writeSyncData( compound );
+		System.err.println( "tag " + compound.toString( ) );
 		return compound;
 	}
 
+
+	@Override
+	public SPacketUpdateTileEntity getUpdatePacket( )
+	{
+		final NBTTagCompound compound = new NBTTagCompound( );
+		this.writeSyncData( compound );
+		return new SPacketUpdateTileEntity( this.pos , 0 , compound );
+	}
+
+
+	@Override
+	public NBTTagCompound getUpdateTag( )
+	{
+		final NBTTagCompound compound = new NBTTagCompound( );
+		this.writeToNBT( compound );
+		return compound;
+	}
+
+
+	@Override
+	public void onDataPacket( final NetworkManager net , final SPacketUpdateTileEntity pkt )
+	{
+		if ( this.worldObj.isRemote ) {
+			this.readSyncData( pkt.getNbtCompound( ) );
+			final IBlockState state = this.worldObj.getBlockState( this.pos );
+			this.worldObj.notifyBlockUpdate( this.pos , state , state , 3 );
+		}
+	}
+
+
+	public void setRecipe( final ResourceLocation location )
+	{
+		MAlloyRecipe recipe = MAlloyRecipe.REGISTRY.getRecipe( location );
+		if ( recipe == null ) {
+			recipe = MAlloyRecipe.REGISTRY.getRecipes( ).get( 0 );
+		}
+
+		if ( recipe == this.recipe ) {
+			return;
+		}
+		this.recipe = recipe;
+
+		if ( !this.worldObj.isRemote ) {
+			this.markDirty( );
+			final IBlockState state = this.worldObj.getBlockState( this.pos );
+			this.worldObj.notifyBlockUpdate( this.pos , state , state , 3 );
+		}
+	}
+
+
+	private void readSyncData( final NBTTagCompound compound )
+	{
+		final String recipeName = compound.getString( "Recipe" );
+		this.recipe = MAlloyRecipe.REGISTRY.getRecipe( new ResourceLocation( recipeName ) );
+		if ( this.recipe == null ) {
+			this.recipe = MAlloyRecipe.REGISTRY.getRecipes( ).get( 0 );
+		}
+	}
+
+
+	private void writeSyncData( final NBTTagCompound compound )
+	{
+		compound.setString( "Recipe" , this.recipe.name.toString( ) );
+	}
+
 }
diff --git a/src/java/mmm/tech/base/TechBase.java b/src/java/mmm/tech/base/TechBase.java
index 62ed93d..87c73d9 100644
--- a/src/java/mmm/tech/base/TechBase.java
+++ b/src/java/mmm/tech/base/TechBase.java
@@ -30,7 +30,6 @@ public class TechBase
 		GameRegistry.registerTileEntity( TBAlloyFurnaceTileEntity.class , "mmm:tech/base/alloy_furnace" );
 		NetworkRegistry.INSTANCE.registerGuiHandler( Mmm.get( ) , new TBAlloyFurnaceGuiHandler( ) );
 		URegistry.addServerMessage( TBAlloyFurnaceMessage.class );
-		URegistry.addClientMessage( TBAlloyFurnaceMessage.class );
 
 		// FIXME test, remove this later
 		MAlloyRecipe.build( ).setName( "test" ).setBurnTime( 200 ).setExperience( .05f )
diff --git a/src/resources/assets/mmm/textures/gui/alloy_furnace_1.png b/src/resources/assets/mmm/textures/gui/alloy_furnace_1.png
index 36cbaad31063b97d94930d2e8e2de8c1235ce700..2fded745ce4f251adcbc7f64d0a3466b4cf504b1 100644
GIT binary patch
delta 1921
zcmZuuX;{+v7XE=K<d$@E->I9^I8*9ap_GzghL&2HODN`KiH%0;xG#UnOBfVdq%}4!
zrK63RX63%1%}`p6;x%=0O>ERuL?#nZmdiZzWj@^V?VR(R_q>bDKyHw~9XdoL91KVq
z6;8N+XC7^ZT$zfI!#yVPjjqO|(E5T$n4w)2sF;W#SX+x=OCvhvZca?IPQ}%O$C{g)
z&u=cw>ERt@(vKz5y$p`j^9);FNwnCRu#j18BHOv}9I?E9wtr4Ti)57N{LOmiT&h*H
z)xX6=Bmd34dhX=L_h+Nbp|mV|a%ADTh0>yS3MaC<r?dDA{_O-NHG?ZbI|jEOd77Im
zDlPssyhI*Hj*Aj`aWh(4%1)0)F-u#CgR3X<KHnYa?=w8`j=JrMIJ5A;C%>(#@lZ2k
z<;wv-%d{bq%v>vn7GzQ|y!iQB2y$OnWEHx<c4Ot*q2Jkz9Fm@gcrVwL?}(i*_fxU?
z8KyTfujNW3OyDHOjZ-alD?bRTmdS^=`^DQjEN}Y2QuW49sO-}bpVHtYG@5}HI|ybr
z4=rzsNtN*tIT5JH{v94R;VGU>=*hgXiN3A^t4qVytXTl(orv?N?@6Od8tj<RbYu0n
zPH;7nFHF*Lhu%+4l7B2I39K&mtr}c-{_|+u*YW$c(7o=g<PEj<B`Uht`h1CSuG0`(
zqLIrOa$h4ov?#-{*=)h;>a!EVI~%z#Eb>DBmGyLoma)B(uHD(lqoVNTZ;Dp#>e7lA
z+otJEmEuPMWIbe|g#u<Id5()nzotdH4I_}m@t_}6)ALXoxRk)NW-;*7g3`s8x#0+K
zi#q(DsrF>#aEP3Hjj0%Z6tiF_5X^KJY~b_zVf;JK^P1BdA-M}}OTYXVKbX~Fxe;;P
z)x_;B74rL1;R0ZIVMpj=N)-K<qBccuAi;=%w)Q#}Ygy<}VE`O%RYoVx$p)oUrI0d1
zm}w_!YHP!_S6ot@RYnF#8=9Sew*U=I3Tf<ks&e&2{hVqtOTM?SukTM@(XD_A;@c1L
zXD;lL+`m}dEp%?Q=5}n=mT{3yCwCjcY!F4WeV?k(5|OVcXCt{P9ahdAQ`S?}3o{o)
z^ILlp`OGL82FIhEyA^HdILIwQ|NWp6%N_T@0~Af`d(}2fR#6FcEbCM0M;u$JdLQnd
zPD24(e$BEfHAA`>)Z&k|{;YfDg{oBSi+?Dyz~`_&E-lr_IOK8+lptDU#ado@J|~{;
z7Gak4M0+z-kexs|hgPi>k#~Z%wKc)~{DYO8z(>WEjFCiJ$X_($Xt80PDGt-c6t^mV
z>zHA2ld>lC!ZVLM0AD{pow{`=vP-46&{_6XOHbpFEF~jlB{7C8OT~64@7Hd-TC4IT
zm5=R6*9=Be?io_5tqg+nju)m*CWfKs2fecUw+XN#!>>(rT~8jM_uhl=fRQq1sh1;0
z+$yIur5_=#u_uIPm#fqaijBQ)SOF&2TdQdhi*sY=8h>-KZ6Rw?(?C5O7|WQ5jV_w(
zx%OTi#JKHm(rUsXuoXJV*oni<0)M#&9+XMx*#Owu06Z$@Rx-^0sCnAtDXF*X0YHgM
z*#v&i_sX*}h2tk!l#-x2a+s`rvp%FR`0#-Mp7HLF%ryyIm3v&U*azn*r~XJahvR)%
z;b8o+Z&kv_|4xKJxD9)yw?3=}_4X*+3&(;!g2xztu}k*DG)+$bbY(g$ka8hPyxS7Y
zXao=}gAf;dc6W&>LE^ftphmO=O$cY<wfo`@WSWjh>i#&bIK~~?mq&!U%#*^7+piZy
zh7|Hzq5GPzQ99Y$Yudq`($^~j9_s}o+qO%K=>`?{`++B|GvlYTJ=@bIyVfL<@+nc&
zqM80YY<~TAJTy#_$Jzp2wO0X;dg$<3VCIGhUfs*r00>|M01Ti29soE9&Nrl8+K=e^
zwg%<=XiNyz{zPG3JTxGDjL8SV3&3#TnISF4tD#XN0jRzF$E~^>eRcE9+pwG4i3B>=
z^a#MWc+2ARw-cXKs!0N-N;|r!aOf#tBipIwlj~)2-P~PT*>&EO5nK(!KOBg7Vi}0o
z0$BAJ{{{)ekoLtM@B$g}0A&w<$98J^fB*jRUCq3@vPSbDb=?sG0{Dv~b><zJe?c}(
zvYkfs=abs5hu^iidNpzA>tFGft7#p%x$}~ZnGuI8oUf23dkp>-!;eYWja*J@qg$Vm
zcZf#^`l^NByIK~sUIixB*_dIOdKMjp+jVju;xFYK8>A`L03^Xspo~6Si}Y_0T_5qq
zjosT%B&g%^B!r$$>1N_bfA+x13~6Z{WCCGzLm~d|j#C<#;gFE7W;Lja;#W;)J<Iey
ztF@M)>?bKz6kH&}3CW=%jW~QQq>~L;f*Sz5P6+x4u7Jw;^Gz5URo%nHU-_Hy<C`s<
z>_E+7U&GPfI_)=lnq5*(6Vhj!6$yP~JMrdE(HG`Ce9}Sh@^Wp*!Pq+>G*7PoW@*cX
l^-)cZBg&D3N9h`WIjuT*6saq<y-fq^B6|7~YCX<e{vUmWiY@>E

delta 1937
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