Posted April 18, 201411 yr Well, for the past 4 hours I've been trying to get this to work... So, I have a tile entity with a set of Boolean values, and I have a method called "updateBools()" that contains serverside code to update said Boolean values, in that tile entity class (the code can ONLY be run serverside as it accesses the worlds directly [3rd party API]). I will need the server to update the Boolean values every tick (for clientside rendering), however: if(!FMLCommonHandler.instance().getEffectiveSide().isClient()){updateBools();} if(FMLCommonHandler.instance().getEffectiveSide().isServer()){updateBools();} and if(this.worldObj.isRemote()){updateBools();} don't work If anybody could point me in the right direction, or at least let me know what I'm doing wrong, I'd be very grateful EDIT: the 3 mentioned above are put into updateEntity()
April 18, 201411 yr Hi Some code is only ever run on the server side, not the client side. isRemote() will always return false in that case. You need to put your updateBools in a method that is called on the client side. Some more background information here http://greyminecraftcoder.blogspot.com.au/2013/10/the-most-important-minecraft-classes.html and http://greyminecraftcoder.blogspot.com.au/2013/10/client-server-communication-using.html -TGG
April 18, 201411 yr Author That's what I mean: I want the server to run updateBools() because the methods called inside are server-only, and won't run clientside without crashing. When checking for isRemote() to be false in updateEntity(), the code never runs, so I need a way of making the server run the updateBools() method. My code: Boolean tileup = false; Boolean tiledown = false; Boolean tileleft = false; Boolean tileright = false; Boolean tilefront = false; Boolean tileback = false; public void updateBools(){ tileup = EnergyNet.instance.getTileEntity(this.worldObj, xCoord, yCoord+1, zCoord) != null; tiledown = EnergyNet.instance.getTileEntity(this.worldObj, xCoord, yCoord-1, zCoord) != null; tileleft = EnergyNet.instance.getTileEntity(this.worldObj, xCoord-1, yCoord, zCoord) != null;; tileright = EnergyNet.instance.getTileEntity(this.worldObj, xCoord+1, yCoord, zCoord) != null; tilefront = EnergyNet.instance.getTileEntity(this.worldObj, xCoord, yCoord, zCoord+1) != null; tileback = EnergyNet.instance.getTileEntity(this.worldObj, xCoord, yCoord, zCoord-1) != null; } public void updateEntity(){ if(!FMLCommonHandler.instance().getEffectiveSide().isClient()){ updateBools(); } } (Spoiler wouldn't work ) If that makes sense...
April 18, 201411 yr OK I understand your question better now. What class is your updateEntity() method in? What are you expecting to call it? -TGG
April 18, 201411 yr He listed it as updatebools. I'm betting he just has the method and isn't calling it from any method the server ticks. Long time Bukkit & Forge Programmer Happy to try and help
April 18, 201411 yr Author I have a class called TileEntityWire extending TileEntity, it is registered in my main mod class, and it works fine apart from this rather large issue I have overriden the updateEntity class, and have other functions working in it perfectly. The only problem is - I cant get these shared boolean values to be updated by the server, because it isn't running my code and delphi, the server does tick updateEntity() right?
April 18, 201411 yr Hi updateEntity is called on both client and server side, assuming your TileEntity is properly registered and created on the server side as well as the client side. Are you sure your updateEntity() is being called on the client side? i.e. maybe it's not being called at all. I would suggest you create a flat land, place your tile entity, then put a breakpoint into World.updateEntities and see why it gets called on the client but not on the server. That should give you a more direct clue to the problem -TGG
April 18, 201411 yr Author I just tried out System.out.println("Hi "); in my updateEntity() method, It just appears that the method is not being called so updateEntity() works, just not updateBools() and in updateEntity() i have if(!this.worldObj.isRemote){updateBools();}
April 18, 201411 yr Author Oh, and putting the same code in updateBools() won't work GameRegistry.registerTileEntity(TileEntityWire.class, "SCWireEntity"); ^^ thats all good, right?
April 18, 201411 yr Author Okay, so I now know that updateEntity() is not being ticked by the server, only the client, any ideas why?
April 18, 201411 yr So, where is your tileentity registration code? please show the code. I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP) II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.
April 18, 201411 yr Author So, where is your tileentity registration code? please show the code. GameRegistry.registerTileEntity(TileEntityWire.class, "SCWireEntity");
April 18, 201411 yr So, where is your tileentity registration code? please show the code. GameRegistry.registerTileEntity(TileEntityWire.class, "SCWireEntity"); So where is the registration code? I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP) II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.
April 18, 201411 yr Author Don't worry people, I just realised what I was doing wrong I'd forgotten to sync my boolen values from/to server<-->client, therefore they were changing serverside, and nothing was happening clientside *facepalm* Thanks for your help anyway
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.