Posted July 22, 20196 yr Hi, My Minecraft client keeps crashing every time I try to open up my Grinder block. I assume it's a Container GUI bug, but I don't know why the NPE is throwing Ticking Player . Here's the crash log: ---- Minecraft Crash Report ---- // Why did you do that? Time: 7/22/19 4:57 AM Description: Ticking player java.lang.NullPointerException: Ticking player at net.minecraft.inventory.Slot.getStack(Slot.java:81) at net.minecraft.inventory.Container.detectAndSendChanges(Container.java:97) at com.ssbbpeople.metallurgy.blocks.grinder.ContainerGrinder.detectAndSendChanges(ContainerGrinder.java:65) at net.minecraft.entity.player.EntityPlayerMP.onUpdate(EntityPlayerMP.java:365) at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2171) at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:871) at net.minecraft.world.World.updateEntity(World.java:2130) at net.minecraft.world.WorldServer.tickPlayers(WorldServer.java:672) at net.minecraft.world.World.updateEntities(World.java:1906) at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:643) at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:842) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592) at java.lang.Thread.run(Unknown Source) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Server thread Stacktrace: at net.minecraft.inventory.Slot.getStack(Slot.java:81) at net.minecraft.inventory.Container.detectAndSendChanges(Container.java:97) at com.ssbbpeople.metallurgy.blocks.grinder.ContainerGrinder.detectAndSendChanges(ContainerGrinder.java:65) at net.minecraft.entity.player.EntityPlayerMP.onUpdate(EntityPlayerMP.java:365) at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2171) at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:871) at net.minecraft.world.World.updateEntity(World.java:2130) -- Player being ticked -- Details: Entity Type: null (net.minecraft.entity.player.EntityPlayerMP) Entity ID: 0 Entity Name: Player127 Entity's Exact location: -1486.50, 4.00, 122.50 Entity's Block location: World: (-1487,4,122), Chunk: (at 1,0,10 in -93,7; contains blocks -1488,0,112 to -1473,255,127), Region: (-3,0; contains chunks -96,0 to -65,31, blocks -1536,0,0 to -1025,255,511) Entity's Momentum: 0.00, -0.08, 0.00 Entity's Passengers: [] Entity's Vehicle: ~~ERROR~~ NullPointerException: null Stacktrace: at net.minecraft.world.WorldServer.tickPlayers(WorldServer.java:672) at net.minecraft.world.World.updateEntities(World.java:1906) at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:643) -- Affected level -- Details: Level name: Test World - 7B All players: 1 total; [EntityPlayerMP['Player127'/0, l='Test World - 7B', x=-1486.50, y=4.00, z=122.50]] Chunk stats: ServerChunkCache: 625 Drop: 0 Level seed: -1413871684550780093 Level generator: ID 01 - flat, ver 0. Features enabled: true Level generator options: Level spawn location: World: (-1487,4,118), Chunk: (at 1,0,6 in -93,7; contains blocks -1488,0,112 to -1473,255,127), Region: (-3,0; contains chunks -96,0 to -65,31, blocks -1536,0,0 to -1025,255,511) Level time: 219 game time, 219 day time Level dimension: 0 Level storage version: 0x04ABD - Anvil Level weather: Rain time: 112927 (now: false), thunder time: 171545 (now: false) Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true Stacktrace: at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:842) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592) at java.lang.Thread.run(Unknown Source) -- System Details -- Details: Minecraft Version: 1.12.2 Operating System: Windows 7 (amd64) version 6.1 Java Version: 1.8.0_221, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 844942440 bytes (805 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB) JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP 9.42 Powered by Forge 14.23.5.2838 5 mods loaded, 5 mods active States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored | State | ID | Version | Source | Signature | |:------ |:--------- |:------------ |:-------------------------------- |:--------- | | LCHIJA | minecraft | 1.12.2 | minecraft.jar | None | | LCHIJA | mcp | 9.42 | minecraft.jar | None | | LCHIJA | FML | 8.0.99.99 | forgeSrc-1.12.2-14.23.5.2838.jar | None | | LCHIJA | forge | 14.23.5.2838 | forgeSrc-1.12.2-14.23.5.2838.jar | None | | LCHIJA | mm | 1.0 | bin | None | Loaded coremods (and transformers): GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. Profiler Position: N/A (disabled) Player Count: 1 / 8; [EntityPlayerMP['Player127'/0, l='Test World - 7B', x=-1486.50, y=4.00, z=122.50]] Type: Integrated Server (map_client.txt) Is Modded: Definitely; Client brand changed to 'fml,forge' Here's my ContainerGrinder class: package com.ssbbpeople.metallurgy.blocks.grinder; import com.ssbbpeople.metallurgy.blocks.grinder.slots.SlotGrinderFuel; import com.ssbbpeople.metallurgy.blocks.grinder.slots.SlotGrinderOutput; import com.ssbbpeople.metallurgy.blocks.tileentities.TileEntityGrinder; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.*; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.SlotItemHandler; public class ContainerGrinder extends Container { private IInventory TileEntityGrinder; GrinderTileEntity tileentity; private IItemHandler InvHandler; private final IInventory tileFurnace; private int cookTime, totalCookTime, ovenBurnTime, currentItemBurnTime; public ContainerGrinder(InventoryPlayer playerInventory, IInventory furnaceInventory, GrinderTileEntity containerTileEntity) { this.tileentity = containerTileEntity; this.tileFurnace = furnaceInventory; this.addSlotToContainer(new Slot(furnaceInventory, 0, 56, 17)); this.addSlotToContainer(new SlotGrinderFuel(furnaceInventory, 1, 56, 53)); this.addSlotToContainer(new SlotGrinderOutput(playerInventory.player, furnaceInventory, 2, 116, 35)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; ++j) { this.addSlotToContainer(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for(int k = 0; k < 9; k++) { this.addSlotToContainer(new Slot(playerInventory, k, 8 + k * 18, 142)); } } public ContainerGrinder(IInventory playerInventory, IInventory furnaceInventory, GrinderTileEntity containerTileEntity) { this.tileentity = containerTileEntity; this.tileFurnace = furnaceInventory; this.InvHandler = ((ICapabilityProvider) tileentity).getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); } @Override public void addListener(IContainerListener listener) { super.addListener(listener); listener.sendAllWindowProperties(this, this.TileEntityGrinder); } @Override public void detectAndSendChanges() { super.detectAndSendChanges(); for (int i = 0; i < this.listeners.size(); ++i) { IContainerListener icontainerlistener = this.listeners.get(i); if (this.cookTime != this.TileEntityGrinder.getField(2)) { icontainerlistener.sendWindowProperty(this, 2, this.TileEntityGrinder.getField(2)); } if (this.ovenBurnTime != this.TileEntityGrinder.getField(0)) { icontainerlistener.sendWindowProperty(this, 0, this.TileEntityGrinder.getField(0)); } if (this.currentItemBurnTime != this.TileEntityGrinder.getField(1)) { icontainerlistener.sendWindowProperty(this, 1, this.TileEntityGrinder.getField(1)); } if (this.totalCookTime != this.TileEntityGrinder.getField(3)) { icontainerlistener.sendWindowProperty(this, 3, this.TileEntityGrinder.getField(3)); } } this.cookTime = this.TileEntityGrinder.getField(2); this.ovenBurnTime = this.TileEntityGrinder.getField(0); this.currentItemBurnTime = this.TileEntityGrinder.getField(1); this.totalCookTime = this.TileEntityGrinder.getField(3); } @Override public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) { ItemStack itemstack = ItemStack.EMPTY; Slot slot = this.inventorySlots.get(index); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if (index == 2) { if (!this.mergeItemStack(itemstack1, 3, 39, true)) { return ItemStack.EMPTY; } slot.onSlotChange(itemstack1, itemstack); } else if (index != 1 && index != 0) { if (!GrinderRecipes.instance().getCookingResult(itemstack1).isEmpty()) { if (!this.mergeItemStack(itemstack1, 0, 1, false)) { return ItemStack.EMPTY; } } else if (ContainerGrinder.isItemFuel(itemstack1)) { if (!this.mergeItemStack(itemstack1, 1, 2, false)) { return ItemStack.EMPTY; } } else if (index >= 3 && index < 30) { if (!this.mergeItemStack(itemstack1, 30, 39, false)) { return ItemStack.EMPTY; } } else if (index >= 30 && index < 39 && !this.mergeItemStack(itemstack1, 3, 30, false)) { return ItemStack.EMPTY; } } else if (!this.mergeItemStack(itemstack1, 3, 39, false)) { return ItemStack.EMPTY; } if (itemstack1.isEmpty()) { slot.putStack(ItemStack.EMPTY); } else { slot.onSlotChanged(); } if (itemstack1.getCount() == itemstack.getCount()) { return ItemStack.EMPTY; } slot.onTake(playerIn, itemstack1); } return itemstack; } public static int getItemBurnTime(ItemStack stack) { if (stack.isEmpty()) { return 0; } else { int burnTime = net.minecraftforge.event.ForgeEventFactory.getItemBurnTime(stack); if (burnTime >= 0) return burnTime; Item item = stack.getItem(); if (item == Items.REDSTONE) { return 300; } else if (item ==Item.getItemFromBlock(Blocks.REDSTONE_BLOCK)) { return 4000; } } return 300; } public static boolean isItemFuel(ItemStack stack) { return getItemBurnTime(stack) > 0; } public ContainerGrinder(InventoryPlayer playerInventory, IInventory furnaceInventory) { this.TileEntityGrinder = furnaceInventory; this.tileFurnace = furnaceInventory; this.addSlotToContainer(new Slot(furnaceInventory, 0, 56, 17)); this.addSlotToContainer(new SlotGrinderFuel(furnaceInventory, 1, 56, 53)); this.addSlotToContainer(new SlotGrinderOutput(playerInventory.player, furnaceInventory, 2, 116, 35)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; ++j) { this.addSlotToContainer(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for(int k = 0; k < 9; k++) { this.addSlotToContainer(new Slot(playerInventory, k, 8 + k * 18, 142)); } } //Tile Entities @Override public void updateProgressBar(int id, int data) { this.TileEntityGrinder.setField(id, data); } @Override public boolean canInteractWith(EntityPlayer playerIn) { return this.TileEntityGrinder.isUsableByPlayer(playerIn); } } And my TileEntityGrinder class: package com.ssbbpeople.metallurgy.blocks.tileentities; import javax.annotation.Nullable; import com.ssbbpeople.metallurgy.blocks.grinder.ContainerGrinder; import com.ssbbpeople.metallurgy.blocks.grinder.Grinder; import com.ssbbpeople.metallurgy.blocks.grinder.GrinderRecipes; import com.ssbbpeople.metallurgy.blocks.grinder.slots.SlotGrinderFuel; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.inventory.ItemStackHelper; import net.minecraft.item.Item; import net.minecraft.item.ItemBoat; import net.minecraft.item.ItemDoor; import net.minecraft.item.ItemHoe; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.item.ItemTool; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityLockable; import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import net.minecraft.util.NonNullList; import net.minecraft.util.datafix.DataFixer; import net.minecraft.util.datafix.FixTypes; import net.minecraft.util.datafix.walkers.ItemStackDataLists; import net.minecraft.util.math.MathHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.ItemStackHandler; public class TileEntityGrinder extends TileEntity implements IInventory, ISidedInventory { private static final int[] SLOTS_TOP = new int[] {0}; private static final int[] SLOTS_BOTTOM = new int[] {2, 1}; private static final int[] SLOTS_SIDES = new int[] {1}; private NonNullList<ItemStack> furnaceItemStacks = NonNullList.<ItemStack>withSize(3, ItemStack.EMPTY); private int furnaceBurnTime; private int currentItemBurnTime; private static int cookTime; private int totalCookTime; private String furnaceCustomName; @Override public int getSizeInventory() { return this.furnaceItemStacks.size(); } @Override public boolean isEmpty() { for(ItemStack stack : this.furnaceItemStacks) { if(!stack.isEmpty()) { return false; } } return true; } @Override public ItemStack getStackInSlot(int index) { return this.furnaceItemStacks.get(index); } @Override public ItemStack decrStackSize(int index, int count) { return ItemStackHelper.getAndSplit(furnaceItemStacks, index, count); } @Override public ItemStack removeStackFromSlot(int index) { return ItemStackHelper.getAndRemove(furnaceItemStacks, index); } @Override public void setInventorySlotContents(int index, ItemStack stack) { ItemStack itemStack = this.furnaceItemStacks.get(index); boolean flag = !stack.isEmpty() && stack.isItemEqual(itemStack) && ItemStack.areItemStackShareTagsEqual(stack, itemStack); this.furnaceItemStacks.set(index, stack); if(stack.getCount() > this.getInventoryStackLimit()) { stack.setCount(this.getInventoryStackLimit()); } if(index == 0 && !flag) { this.totalCookTime = this.getCookTime(stack); this.cookTime = 0; this.markDirty(); } } @Override public String getName() { return this.hasCustomName() ? this.furnaceCustomName : "container.grinder"; } @Override public boolean hasCustomName() { return this.furnaceCustomName != null && !this.furnaceCustomName.isEmpty(); } public void setCustomInventoryName(String furnaceCustomName) { this.furnaceCustomName = furnaceCustomName; } public static void registerFixesFurnace(DataFixer fixer) { fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityGrinder.class, new String[] {"Items"})); } @Override public int getInventoryStackLimit() { return 64; } public boolean isBurning() { return this.furnaceBurnTime > 0; } @SideOnly(Side.CLIENT) public static boolean isBurning(IInventory inventory) { return inventory.getField(0) > 0; } public void update() { boolean flag = this.isBurning(); boolean flag1 = false; if (this.isBurning()) { --this.furnaceBurnTime; } if (!this.world.isRemote) { ItemStack itemstack = this.furnaceItemStacks.get(1); if (this.isBurning() || !itemstack.isEmpty() && !((ItemStack)this.furnaceItemStacks.get(0)).isEmpty()) { if (!this.isBurning() && this.canSmelt()) { this.furnaceBurnTime = getItemBurnTime(itemstack); this.currentItemBurnTime = this.furnaceBurnTime; if (this.isBurning()) { flag1 = true; if (!itemstack.isEmpty()) { Item item = itemstack.getItem(); itemstack.shrink(1); if (itemstack.isEmpty()) { ItemStack item1 = item.getContainerItem(itemstack); this.furnaceItemStacks.set(1, item1); } } } } if (this.isBurning() && this.canSmelt()) { ++this.cookTime; if (this.cookTime == this.totalCookTime) { this.cookTime = 0; this.totalCookTime = this.getCookTime(this.furnaceItemStacks.get(0)); this.smeltItem(); flag1 = true; } } else { this.cookTime = 0; } } else if (!this.isBurning() && this.cookTime > 0) { this.cookTime = MathHelper.clamp(this.cookTime - 2, 0, this.totalCookTime); } } if (flag1) { this.markDirty(); } } public int getCookTime(ItemStack stack) { return 10; } private boolean canSmelt() { if (((ItemStack)this.furnaceItemStacks.get(0)).isEmpty()) { return false; } else { ItemStack itemstack = GrinderRecipes.instance().getCookingResult(this.furnaceItemStacks.get(0)); if (itemstack.isEmpty()) { return false; } else { ItemStack itemstack1 = this.furnaceItemStacks.get(2); if (itemstack1.isEmpty()) { return true; } else if (!itemstack1.isItemEqual(itemstack)) { return false; } else if (itemstack1.getCount() + itemstack.getCount() <= this.getInventoryStackLimit() && itemstack1.getCount() + itemstack.getCount() <= itemstack1.getMaxStackSize()) { return true; } else { return itemstack1.getCount() + itemstack.getCount() <= itemstack.getMaxStackSize(); } } } } public void smeltItem() { if (this.canSmelt()) { ItemStack itemstack = this.furnaceItemStacks.get(0); ItemStack itemstack1 = GrinderRecipes.instance().getCookingResult(itemstack); ItemStack itemstack2 = this.furnaceItemStacks.get(2); if (itemstack2.isEmpty()) { this.furnaceItemStacks.set(2, itemstack1.copy()); } else if (itemstack2.getItem() == itemstack1.getItem()) { itemstack2.grow(itemstack1.getCount()); } if (itemstack.getItem() == Item.getItemFromBlock(Blocks.SPONGE) && itemstack.getMetadata() == 1 && !((ItemStack)this.furnaceItemStacks.get(1)).isEmpty() && ((ItemStack)this.furnaceItemStacks.get(1)).getItem() == Items.BUCKET) { this.furnaceItemStacks.set(1, new ItemStack(Items.WATER_BUCKET)); } itemstack.shrink(1); } } public static int getItemBurnTime(ItemStack stack) { if (stack.isEmpty()) { return 0; } else { int burnTime = net.minecraftforge.event.ForgeEventFactory.getItemBurnTime(stack); if (burnTime >= 0) return burnTime; Item item = stack.getItem(); if (item == Item.getItemFromBlock(Blocks.WOODEN_SLAB)) { return 150; } else if (item == Item.getItemFromBlock(Blocks.WOOL)) { return 100; } } return cookTime; } public static boolean isItemFuel(ItemStack stack) { return getItemBurnTime(stack) > 0; } @Override public boolean isUsableByPlayer(EntityPlayer player) { if(this.world.getTileEntity(this.pos) != this) { return false; } else { return player.getDistanceSq((double)this.pos.getX() + 0.5D, (double)this.pos.getY() + 0.5D, (double)this.pos.getZ() + 0.5D) <= 64.0D; } } public void openInventory(EntityPlayer player) { } public void closeInventory(EntityPlayer player) { } @Override public boolean isItemValidForSlot(int index, ItemStack stack) { if(index == 2) { return false; } else if(index != 1) { return true; } else { ItemStack itemStack = this.furnaceItemStacks.get(1); return isItemFuel(stack) || SlotGrinderFuel.isBucket(stack) && itemStack.getItem() != Items.BUCKET; } } public int[] getSlotsForFace(EnumFacing side) { if(side == EnumFacing.DOWN) { return SLOTS_BOTTOM; } else { return side == EnumFacing.UP ? SLOTS_TOP : SLOTS_SIDES; } } public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) { return this.isItemValidForSlot(index, itemStackIn); } public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) { if(direction == EnumFacing.DOWN && index == 1) { Item item = stack.getItem(); if(item != Items.WATER_BUCKET && item != Items.BUCKET) { return false; } } return true; } public String getGuiID() { return "mm:grinder"; } public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) { return new ContainerGrinder(playerInventory, this); } public int getField(int id) { switch (id) { case 0: return this.furnaceBurnTime; case 1: return this.currentItemBurnTime; case 2: return this.cookTime; case 3: return this.totalCookTime; default: return 0; } } public void setField(int id, int value) { switch (id) { case 0: this.furnaceBurnTime = value; break; case 1: this.currentItemBurnTime = value; break; case 2: this.cookTime = value; break; case 3: this.totalCookTime = value; } } @Override public int getFieldCount() { return 4; } @Override public void clear() { this.furnaceItemStacks.clear(); } net.minecraftforge.items.IItemHandler handlerTop = new net.minecraftforge.items.wrapper.SidedInvWrapper(this, net.minecraft.util.EnumFacing.UP); net.minecraftforge.items.IItemHandler handlerBottom = new net.minecraftforge.items.wrapper.SidedInvWrapper(this, net.minecraft.util.EnumFacing.DOWN); net.minecraftforge.items.IItemHandler handlerSide = new net.minecraftforge.items.wrapper.SidedInvWrapper(this, net.minecraft.util.EnumFacing.WEST); @Override @javax.annotation.Nullable public <T> T getCapability(net.minecraftforge.common.capabilities.Capability<T> capability, @javax.annotation.Nullable net.minecraft.util.EnumFacing facing) { if (facing != null && capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) if (facing == EnumFacing.DOWN) return (T) handlerBottom; else if (facing == EnumFacing.UP) return (T) handlerTop; else return (T) handlerSide; return super.getCapability(capability, facing); } //NBT Tags private ItemStackHandler inventory = new ItemStackHandler(1); @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setTag("inventory", inventory.serializeNBT()); return super.writeToNBT(compound); } @Override public void readFromNBT(NBTTagCompound compound) { inventory.deserializeNBT(compound.getCompoundTag("inventory")); super.readFromNBT(compound); } } Here's my GitHub:https://github.com/SpookyBarca/Metallurgy Any help is appreciated, thank you! Edited July 22, 20196 yr by ssbbpeople
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.