Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Moritz

Forge Modder
  • Joined

  • Last visited

Everything posted by Moritz

  1. Forge should add these functions with ForgeDirection^^"
  2. Yeah but i want that the airlevel goes down and the vannilla drown goes down from allone. Also when i use material.water than it works. But also then you can swim inside of this block. Thats why i want to make a custom Material for it. ^^" But with that it does not work^^"
  3. I want to create a block which they can not breath, when they are inside of this block. How can i do that?
  4. Yeah but i used for loops to catch every side. Than i had the trouble that every gas flows in direction North or South. So i added a random like this: public void flowing(World par0, int par1, int par2, int par3) { if(!canGoUp(par0, par1, par2, par3) && par0.getBlockMetadata(par1, par2, par3) == 9) { if(rand.nextInt(5) == 0) { for(int i = 2;i<6;i++) { if(rand.nextInt(5)+2 == i) { if(WorldReading.isBlockAir(par0, par1, par2, par3, i)) { wanderGas(par0, par1, par2, par3, i); return; } } } } } if(canGoUp(par0, par1,par2,par3)) { flyUp(par0, par1, par2, par3); } else { if(canExpand(par0, par1, par2, par3)) { for(int c=2;c<6;c++) { int meta = par0.getBlockMetadata(par1, par2, par3); if(rand.nextInt(4)+2 == c) { if(meta < 9) { if(!WorldReading.isBlockAir(par0, par1, par2, par3, c)) { if(WorldReading.isSameBlock(par0, par1, par2, par3, c, this.blockID)) { if(WorldReading.getSidedBlockMetadata(par0, par1, par2, par3, c) > 0) { int sidedMeta = WorldReading.getSidedBlockMetadata(par0, par1, par2, par3, c); int cMeta = par0.getBlockMetadata(par1, par2, par3); if(sidedMeta > cMeta) { expandGas(par0, par1, par2, par3, c); } } } } else { CreateGas(par0, par1, par2, par3, c); } } } } } } I already finished the code yesterday and it is perfect (in my opinien) It flows smothly and does not create much lag^^ Also it moves not so fast. And you can see that it moves in random directions^^ And WorldReading is my Own WorldClass with Side Sensitiven Functions ^^
  5. I made a new Gas. Now the thing i do not want to use Material.water. Because first ja can not swim in gas. Now my Question: I want that when you inside of my gas Block that the color of the screen (Like when you go into water it turns a little bit light blue.)get a little bit dark green and that the air goes down^^" How can i do that?
  6. Sorry for beeing cofusing you all. First it was morning and i was in a rush and i wanted to answer fast. second thing this is not a need help post its a have you some ideas post. Third thing the Block has 9 subblocks. Meta 0 = 1000Millibuckets gas Meta 1 = 900 millibuckets gas ..... Meta 9 = 100 Millibuckets Gas Lower it won't go. Now to explaining what was my idea: If you put a full gas block (meta 0) down it flies up. Maximum to height level 150. The he looks is my meta lower than 9 Then it tries to expand. It look around himself if it is free: Than he spawn a new Block (meta 9) and set him +1 meta. that is what it is. ^^ thats my idea^^
  7. Ok maybe i did understand you wrong. But i want to create block that is moving instead of creating flowing blocks. When the Sourceblock can not move up then he tries to extends
  8. i make it that he cuts 1 meta (Meta 0 = Full bucket) (Meta 9 = 100millbuckets) out of it^^" I hoped for more post.
  9. Ok first things first. I added a new type of liquid. Em it is a Gas. Which is finite. Now this gas does not work on Vanilla Mechanics. The Problem is that i have some trouble. And before i run out of ideas ill ask here. Now a view things first. i only ask for ideas how i can handel things. Now my Gas tries always to come up into the hight. If it does can not doing it than it Starts to extends itself. (The gas cut himself i to 100millibuckets) And now the Problem The splitting into parts make me some trouble! A full bucket of gas can cut himself down into 10 parts. Now it runs with a for loop so fast that it extends into million blocks (the gas does stop fly up when he hit the 150 y Coord) now the question do you have some ideas how to spread a gas into peaces without creating more gas which the sourceblock has?
  10. Forget it! I do no longer Care about this bug! They are only serversided and visuell nothing critical. People have to live with it!
  11. Other blocks have server sided problems. like my expStorage^^"
  12. First you did copy the whole Furnace code. Second thing you did copy the Furnace code not correct. Just copy transferstackinslot from furnace correct right. Then every should. Work. My opinien.
  13. Nope does not work. i had to add a function to the container. public int getExp() { return expnow; } this only returns always 0. so i made it like this: public int getExp() { this.detectAndSendChanges(); return expnow; } Now it showes the changes of the exp. But now the trouble it does not change anything else then i use the tile instead of the container. Any other idea?
  14. and how can i use a variable from the container?
  15. I understand the code. I think that the block will be refreshed when you ask for his metadata^^
  16. Interesting problem. First you shoud use at getLightValue (BlockSide) every time you do not want light 0. Now i post some code which i found at eloraams code just copy and paste it in your TileEntity and call it over the UpdateEntity Function. That solve your problem. I tested it with the BaconMod^^" and a hint you do not need worldObj is remote public void updateBlock() { int var1 = this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord); this.worldObj.markBlockForRenderUpdate(this.xCoord, this.yCoord, this.zCoord); markBlockDirty(this.worldObj, this.xCoord, this.yCoord, this.zCoord); } public void markBlockDirty(World var0, int var1, int var2, int var3) { if (var0.blockExists(var1, var2, var3)) { var0.getChunkFromBlockCoords(var1, var3).setChunkModified(); } } Don't ask my why this function is asking for blockMetadata. just leave it as it is eloraam know what she did^^" Its her code i copied it and it works perfect^^"
  17. if you want to get the worldname then use this: (i used it for my wireless redstone to make it transdimensional^^") You only need to get the world(over entity the world is called worldObj) String name = world.provider.getDimensionName(); with that you have the name of the Dimension where you are^^
  18. with getDiscriptionPacket? and onPackedRecived? These functions which are in the TileEntityClass? if you mean that i already tested that it does not working!
  19. Yeah but when you generate a block then you can use the onBlockPlacedBy in the worldGenerator. I had to test a view things with this. Time flows to fast for coding^*
  20. make it like this: public ItemStack getContainerItemStack(ItemStack par1) { par1.setItemDamage(par1.getItemDamage()+1); return par1.copy(); } i hope that helps^^"
  21. onBlockAdded is when you place a block next to your mod. Use onBlockPlacedBy that is what you need^^"
  22. Yeah same problem as before but now with that i do not click on the block i just put a item in like a furnace here 2 pics that explains more then 1000 words. Exp in a bottle (51000 Exp): https://www.dropbox.com/s/p05ftkf8waoee0g/No%20Exp%20in%20the%20storage.bmp Exp now in my Storage (51000 Exp): https://www.dropbox.com/s/d9mwxpi59up5nrs/Exp%20in%20the%20storage.bmp here my full code of the Exp Bottles: package speiger.src.api.common.items; import java.util.List; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import speiger.src.api.SpmodAPI; import speiger.src.api.api.IExpBottle; import speiger.src.api.common.lib.APITextures; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ItemEXPBottles extends ItemSpmod implements IExpBottle { private int transferlimit; private int texture; private String name; private int storedExp; public ItemEXPBottles(int par1, int storedEXP, int transportlimit, int itemTexture, String itemname, boolean beta) { super(par1, beta); this.setNoRepair(); setMaxDamage(4); storedExp = storedEXP; setMaxStackSize(1); transferlimit = transportlimit; texture = itemTexture; name = itemname; setCreativeTab(SpmodAPI.spmodAPI); } @Override public String getTextureFile() { return APITextures.apiTexturePath; } public int getIconFromDamage(int par1) { return texture; } @Override public void charge(int i, ItemStack par1) { NBTTagCompound par2 = par1.getTagCompound().getCompoundTag("ExpBottle"); int b = par2.getInteger("StoredExp"); par2.setInteger("StoredExp", b+i); int d = b+i; if(d > 0) { if(d > (storedExp / 4)) { if(d > (storedExp / 2)) { if(d > ((storedExp / 4) * 3)) { if(d >= storedExp) { par1.setItemDamage(0); } else { par1.setItemDamage(1); } } else { par1.setItemDamage(2); } } else { par1.setItemDamage(3); } } else { par1.setItemDamage(4); } } } @Override public void discharge(int i, ItemStack par1) { NBTTagCompound par2 = par1.getTagCompound().getCompoundTag("ExpBottle"); int d = par2.getInteger("StoredExp"); par2.setInteger("StoredExp", d-i); int b = d-i; if(b > 0) { if(b > (storedExp / 4)) { if(b > (storedExp / 2)) { if(b > ((storedExp / 4) * 3)) { if(b >= storedExp) { par1.setItemDamage(0); } else { par1.setItemDamage(1); } } else { par1.setItemDamage(2); } } else { par1.setItemDamage(3); } } else { par1.setItemDamage(4); } } } @Override public int getTransferlimit(ItemStack par1) { return this.transferlimit; } @Override public int getMaxCharge(ItemStack par1) { return this.storedExp; } @Override public int getStoredExp(ItemStack par1) { NBTTagCompound par2 = par1.getTagCompound().getCompoundTag("ExpBottle"); return par2.getInteger("StoredExp"); } @Override public boolean hasExp(ItemStack par1) { NBTTagCompound par2 = par1.getTagCompound().getCompoundTag("ExpBottle"); if(par2.getInteger("StoredExp") > 0) { return true; } return false; } @Override public boolean needsExp(ItemStack par1) { NBTTagCompound par2 = par1.getTagCompound().getCompoundTag("ExpBottle"); if(par2.getInteger("StoredExp")< this.storedExp) { return true; } return false; } @Override @SideOnly(Side.CLIENT) public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3) { NBTTagCompound nbtEmpty = new NBTTagCompound(); nbtEmpty.setCompoundTag("ExpBottle", new NBTTagCompound()); nbtEmpty.getCompoundTag("ExpBottle").setInteger("StoredExp", 0); ItemStack empty = new ItemStack(par1, 1, 4); empty.setTagCompound(nbtEmpty); par3.add(empty); NBTTagCompound nbtFull = new NBTTagCompound(); nbtFull.setCompoundTag("ExpBottle", new NBTTagCompound()); nbtFull.getCompoundTag("ExpBottle").setInteger("StoredExp", this.storedExp); ItemStack full = new ItemStack(par1, 1, 0); full.setTagCompound(nbtFull); par3.add(full); } @Override public String getItemDisplayName(ItemStack par1ItemStack) { return this.name; } @Override @SideOnly(Side.CLIENT) public boolean hasEffect(ItemStack par1ItemStack) { return this.hasExp(par1ItemStack); } @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack par1, EntityPlayer par2, List par3, boolean par4) { if(par1.hasTagCompound()) { if(par1.getTagCompound().getCompoundTag("ExpBottle")!= null) { par3.add("Stored EXP: "+par1.getTagCompound().getCompoundTag("ExpBottle").getInteger("StoredExp")); } } par3.add("Can Store: "+this.storedExp+" EXP"); this.getInformation(par1, par2, par3, par4); } } Container of the Basic Exp Storage: package speiger.src.api.common.container; import java.util.Iterator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import speiger.src.api.api.IExpBottle; import speiger.src.api.common.tile.BasicExpBench; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ContainerBasicExpBench extends Container { private int expnow = 0; private BasicExpBench tile; public ContainerBasicExpBench(InventoryPlayer par1, BasicExpBench par2) { addSlotToContainer(new Slot(par2, 0, 43, 35)); //Import Slot addSlotToContainer(new Slot(par2, 1, 116, 35)); //Output Slot tile = par2; int var3; for (var3 = 0; var3 < 3; ++var3) { for (int var4 = 0; var4 < 9; ++var4) { this.addSlotToContainer(new Slot(par1, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); } } for (var3 = 0; var3 < 9; ++var3) { this.addSlotToContainer(new Slot(par1, var3, 8 + var3 * 18, 142)); } } @Override public boolean canInteractWith(EntityPlayer var1) { return true; } @Override public void detectAndSendChanges() { super.detectAndSendChanges(); for (int var1 = 0; var1 < this.crafters.size(); ++var1) { ICrafting var2 = (ICrafting)this.crafters.get(var1); if (this.expnow != this.tile.exp) { var2.sendProgressBarUpdate(this, 0, this.tile.exp); } } expnow = tile.exp; } @SideOnly(Side.CLIENT) public void updateProgressBar(int par1, int par2) { if (par1 == 0) { this.tile.exp = par2; } } public void addCraftingToCrafters(ICrafting par1ICrafting) { super.addCraftingToCrafters(par1ICrafting); par1ICrafting.sendProgressBarUpdate(this, 0, tile.exp); } public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) { ItemStack var3 = null; Slot var4 = (Slot)this.inventorySlots.get(par2); if (var4 != null && var4.getHasStack()) { ItemStack var5 = var4.getStack(); var3 = var5.copy(); if (par2 != 1 && par2 != 0) { if (var5.getItem() instanceof IExpBottle) { if (!this.mergeItemStack(var5, 0, 1, false)) { return null; } } else if (var5.getItem() instanceof IExpBottle) { if (!this.mergeItemStack(var5, 1, 2, false)) { return null; } } else if (par2 >= 30 && par2 < 39 && !this.mergeItemStack(var5, 3, 30, false)) { return null; } } else if (!this.mergeItemStack(var5, 3, 39, false)) { return null; } if (var5.stackSize == 0) { var4.putStack((ItemStack)null); } else { var4.onSlotChanged(); } if (var5.stackSize == var3.stackSize) { return null; } var4.onPickupFromSlot(par1EntityPlayer, var5); } return var3; } } Code of the gui Basic Exp Storage: package speiger.src.api.client.gui; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.StatCollector; import org.lwjgl.opengl.GL11; import speiger.src.api.common.container.ContainerBasicExpBench; import speiger.src.api.common.tile.BasicExpBench; public class GuiBasicExpBench extends GuiContainer { private BasicExpBench bench; public GuiBasicExpBench(InventoryPlayer par1, BasicExpBench par2) { super(new ContainerBasicExpBench(par1, par2)); bench = par2; } protected void drawGuiContainerForegroundLayer(int par1, int par2) { this.fontRenderer.drawString("Stored Exp: " + bench.gettingEXP(), 60, 20, 4210752); this.fontRenderer.drawString("Basic Exp Storage", 50, 4, 4210752); this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } /** * Draw the background layer for the GuiContainer (everything behind the items) */ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { int var4 = this.mc.renderEngine.getTexture("/speiger/src/api/textures/gui/basicEXPBench.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture(var4); int var5 = (this.width - this.xSize) / 2; int var6 = (this.height - this.ySize) / 2; this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); } } and now the TileEntity: package speiger.src.api.common.tile; import java.util.List; import java.util.Random; import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.Packet132TileEntityData; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import speiger.src.api.api.IExpBottle; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class BasicExpBench extends TileFacing implements IInventory { public Random rand = new Random(); public int exp = 0; public ItemStack[] basicExp = new ItemStack[2]; public boolean update = false; public int facing = 0; @SideOnly(Side.CLIENT) public int gettingEXP() { return exp; } @Override public int getTextureFromTile(int meta, int side) { if(side == this.facing)return 65; else if(side == 0 || side == 1)return 64; else return 66; } @Override public Packet getDescriptionPacket() { NBTTagCompound var1 = new NBTTagCompound(); super.writeToNBT(var1); var1.setInteger("rotation", facing); var1.setInteger("Experience", exp); this.worldObj.markBlockForRenderUpdate(this.xCoord, this.yCoord, this.zCoord); return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 1, var1); } @Override public void onDataPacket(INetworkManager net, Packet132TileEntityData pkt) { this.readFromNBT(pkt.customParam1); } public int getSizeInventory() { return this.basicExp.length; } public ItemStack getStackInSlot(int par1) { return this.basicExp[par1]; } public ItemStack decrStackSize(int par1, int par2) { if (this.basicExp[par1] != null) { ItemStack var3; if (this.basicExp[par1].stackSize <= par2) { var3 = this.basicExp[par1]; this.basicExp[par1] = null; return var3; } else { var3 = this.basicExp[par1].splitStack(par2); if (this.basicExp[par1].stackSize == 0) { this.basicExp[par1] = null; } return var3; } } else { return null; } } public ItemStack getStackInSlotOnClosing(int par1) { if (this.basicExp[par1] != null) { ItemStack var2 = this.basicExp[par1]; this.basicExp[par1] = null; return var2; } else { return null; } } public void setInventorySlotContents(int par1, ItemStack par2ItemStack) { this.basicExp[par1] = par2ItemStack; if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) { par2ItemStack.stackSize = this.getInventoryStackLimit(); } } public String getInvName() { return "Basic EXP Storage"; } public int getInventoryStackLimit() { return 1; } public boolean isUseableByPlayer(EntityPlayer var1) { return true; } public void openChest() { } @Override public void readFromNBT(NBTTagCompound par1NBTTagCompound) { super.readFromNBT(par1NBTTagCompound); exp = par1NBTTagCompound.getInteger("Experience"); facing = par1NBTTagCompound.getInteger("rotation"); NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); this.basicExp = new ItemStack[this.getSizeInventory()]; for (int var3 = 0; var3 < var2.tagCount(); ++var3) { NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); byte var5 = var4.getByte("Slot"); if (var5 >= 0 && var5 < this.basicExp.length) { this.basicExp[var5] = ItemStack.loadItemStackFromNBT(var4); } } } /** * Writes a tile entity to NBT. */ @Override public void writeToNBT(NBTTagCompound par1NBTTagCompound) { super.writeToNBT(par1NBTTagCompound); NBTTagList var2 = new NBTTagList(); for (int var3 = 0; var3 < this.basicExp.length; ++var3) { if (this.basicExp[var3] != null) { NBTTagCompound var4 = new NBTTagCompound(); var4.setByte("Slot", (byte)var3); this.basicExp[var3].writeToNBT(var4); var2.appendTag(var4); } } par1NBTTagCompound.setTag("Items", var2); par1NBTTagCompound.setInteger("Experience", exp); par1NBTTagCompound.setInteger("rotation", facing); } public void closeChest() { } public void updateBlock() { int var1 = this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord); this.worldObj.markBlockForRenderUpdate(this.xCoord, this.yCoord, this.zCoord); markBlockDirty(this.worldObj, this.xCoord, this.yCoord, this.zCoord); } public void markBlockDirty(World var0, int var1, int var2, int var3) { if (var0.blockExists(var1, var2, var3)) { var0.getChunkFromBlockCoords(var1, var3).setChunkModified(); } } @Override public void updateEntity() { updateBlock(); if(!worldObj.isRemote) { getEXP(); transferExp(); } if(update) { update = false; this.onInventoryChanged(); } } public void transferExp() { if(basicExp[0] != null && basicExp[0].getItem() instanceof IExpBottle) { IExpBottle eb = (IExpBottle) basicExp[0].getItem(); if(eb.hasExp(basicExp[0])) { if(eb.getStoredExp(basicExp[0]) > eb.getTransferlimit(basicExp[0])) { eb.discharge(eb.getTransferlimit(basicExp[0]),basicExp[0]); exp+= eb.getTransferlimit(basicExp[0]); update = true; } else if(eb.getStoredExp(basicExp[0]) > 1000) { eb.discharge(1000, basicExp[0]); exp+= 1000; update = true; } else if(eb.getStoredExp(basicExp[0]) > 100) { eb.discharge(100, basicExp[0]); exp+=100; update = true; } else { eb.discharge(1, basicExp[0]); exp+=1; update = true; } } } if(basicExp[1] != null && basicExp[1].getItem() instanceof IExpBottle) { IExpBottle eb = (IExpBottle) basicExp[1].getItem(); if(exp > eb.getTransferlimit(basicExp[1])) { if(eb.needsExp(basicExp[1])) { if(eb.getStoredExp(basicExp[1]) + eb.getTransferlimit(basicExp[1]) <= eb.getMaxCharge(basicExp[1])) { eb.charge(eb.getTransferlimit(basicExp[1]), basicExp[1]); exp -= eb.getTransferlimit(basicExp[1]); update = true; } else { eb.charge(1, basicExp[1]); exp-=1; update = true; } } } else if(exp > 1000) { if((eb.getMaxCharge(basicExp[1]) - eb.getStoredExp(basicExp[1])) > 1000) { exp-= 1000; eb.charge(1000, basicExp[1]); update = true; } } else if(exp > 100) { if((eb.getMaxCharge(basicExp[1]) - eb.getStoredExp(basicExp[1])) > 100) { exp-= 100; eb.charge(100, basicExp[1]); update = true; } } else if(exp > 0) { if(eb.getStoredExp(basicExp[1]) < eb.getMaxCharge(basicExp[1])) { eb.charge(1, basicExp[1]); exp--; update = true; } } } } public void getEXP() { List<EntityXPOrb> hitList = worldObj.getEntitiesWithinAABB(net.minecraft.entity.item.EntityXPOrb.class, AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 1, zCoord + 1).expand(5.0D, 5.0D, 5.0D)); if (hitList.size() > 0) { Loop: for (EntityXPOrb orb : hitList) { if (orb.isDead) { update = true; continue Loop; } int oldxp = exp; worldObj.playSoundAtEntity(orb, "random.orb", 0.1F, 0.5F * ((rand.nextFloat() - rand.nextFloat()) * 0.7F + 1.8F)); exp += orb.getXpValue(); orb.setDead(); if (oldxp == 0 && exp > 0) { notifyChange(); update = true; } else { notifyResize(); update = true; } } } return; } private void notifyChange() { worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockType().blockID); worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord - 1, zCoord, getBlockType().blockID); notifyResize(); } private void notifyResize() { worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } } what is the problem? I know server has to talk to the client but how if i never use the blockSide?

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.