
tt36999
Members-
Posts
16 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
tt36999's Achievements

Tree Puncher (2/8)
1
Reputation
-
[SLOVED][1.16.5]TileEntityRender render a full black block
tt36999 replied to tt36999's topic in Modder Support
Thanks! Now it works fine -
I'm trying to render item top of tileentity, but the ItemStack render a full black block I have tried to find anyting wrong and i found when MC call TER class of my tileentity the param [combinedLightIn] is 0 I try to debugger and Evaluate WorldRenderer.getLightColor(world, tile.getBlockPos()); other block, only position of my tileentity return 0 here are the code, does anyone know what should i do? public class TestTileEntityRender extends TileEntityRenderer<TestTileEntity> { public TestTileEntityRender(TileEntityRendererDispatcher dispatcher) { super(dispatcher); } @Override public void render(TestTileEntity tile, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) { // combinedLightIn this one is 0 tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(inv -> { ItemStack stack = inv.getStackInSlot(0); if (!stack.isEmpty()) { matrixStackIn.pushPose(); matrixStackIn.translate(0.5, 1.5, 0.5); matrixStackIn.mulPose(Vector3f.YP.rotation(90)); ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); itemRenderer.renderStatic(stack, ItemCameraTransforms.TransformType.FIXED, combinedLightIn, combinedOverlayIn, matrixStackIn, bufferIn);// This line render a full black block matrixStackIn.popPose(); } }); } }
-
[1.16.5]How to create new custom enchantment for tools?
tt36999 replied to tt36999's topic in ForgeGradle
oh,thanks,it's works fine -
I want to create new enchantment called "AutoSmelting", it will change Iron ore to iron ingot, wood log to charcoal when harvest block. How can i do this thing? I saw mc 1.16.5 use loot table to process enchantments like fortune and silk touch drop. Is that mean I need traversal all loot table in LootTableLoadEvent, and add new function to every loot table whitch has a smelting recipe? Or any other way to do this? thanks a lot
-
I have confused between attribute and capability Should i add new custom attribute to vanilla entity? If i want add a custom attribute(e.g. add Mental state as a second Health Bar) to LivingEntity, whitch should i use? I want vanilla Effect system work with my custom attribute sorry for my english 😆
-
My tileentity have two fluid tank and i want fill one of tanks when right click this block with fluid bucket. But when i test my tileentity, the sever side(when world.isRemote == flase)tank always null when block actived, client side working properly @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { ItemStack itemHeld = playerIn.getHeldItem(hand); IFluidHandlerItem handlerItem = FluidUtil.getFluidHandler(itemHeld); if (handlerItem != null) { TileEntityPurifier purifier = (TileEntityPurifier) worldIn.getTileEntity(pos);// BreakPoint 1 in this line server side tileentity's tank always empty IItemHandler iItemHandler = new InvWrapper(playerIn.inventory); FluidActionResult emptyResult = FluidUtil.tryEmptyContainerAndStow(itemHeld, purifier.tank, iItemHandler, purifier.tank.getCapacity(), playerIn, true);//I break this line , idea show me fluid has filled into tileentity, both side fluid amoount changed if (emptyResult.isSuccess()) { playerIn.setHeldItem(hand, emptyResult.getResult()); worldIn.markChunkDirty(pos, purifier); return true; } FluidActionResult fillResultOut = FluidUtil.tryFillContainerAndStow(itemHeld, purifier.outputTank, iItemHandler, purifier.outputTank.getFluidAmount(), playerIn, true); if (fillResultOut.isSuccess()) { playerIn.setHeldItem(hand, fillResultOut.getResult()); worldIn.markChunkDirty(pos, purifier); return true; } FluidActionResult fillResult = FluidUtil.tryFillContainerAndStow(itemHeld, purifier.outputTank, iItemHandler, purifier.tank.getFluidAmount(), playerIn, true); if (fillResult.isSuccess()) { playerIn.setHeldItem(hand, fillResult.getResult()); worldIn.markChunkDirty(pos, purifier); return true; } } else { BrewingCraft.openGui(playerIn, getGui(), worldIn, pos.getX(), pos.getY(), pos.getZ()); return true; } return false; } any idea to fix this?
-
[1.12.2]Guihandler never called after call player.openGui
tt36999 replied to tt36999's topic in Modder Support
OK,I don't want debate this with you, maybe you are right or maybe my, i will try your proposal and remove the common, i hope this can fix my issue. -
[1.12.2]Guihandler never called after call player.openGui
tt36999 replied to tt36999's topic in Modder Support
I don't think is no sense, in my mod most situation client need more code than server, and server proxy even hasn't any code then common. so i just make common to do what serverproxy do, and client extened it , so i can override it. for example if someone write code in proxy to getServerGuiElement and getClientGuiElement(i won't do that , just for example) in common it can return a container for server , and in clientproxy it can use common get container and return gui element. client proxy will become an extension of common, and sometime will different from common -
[1.12.2]Guihandler never called after call player.openGui
tt36999 replied to tt36999's topic in Modder Support
OK,I just don't like write all my code in main file , ClientProxy was extends from CommonProxy, I has a ServerProxy too, if one side need different code , i just override it from CommonProxy I removed it, and do this in client -
I'm working for my mod,and when i want to make a gui to my block i got this problem. When i right my block , onBlockActived method was run without any error.but my gui handler never called this is main file @Mod.Instance public static BrewingCraft instance; @Mod.EventHandler public void init(FMLInitializationEvent event) { proxy.onInit(event); } this is commonproxy(some potion,player event code in this file,i think it's no need to show them) @Override public void onInit(FMLInitializationEvent event) { NetworkRegistry.INSTANCE.registerGuiHandler(BrewingCraft.instance, new BRCGuiHandler()); } here is GuiHandler public class BRCGuiHandler implements IGuiHandler { @Nullable @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { BrewingCraft.logger.info("Get server con " + ID);//never show in colsole switch (ID) { case 0: return new ContainerTestBlock(player.inventory, (TileEntityFluidContainer) world.getTileEntity(new BlockPos(x, y, z))); } BrewingCraft.logger.warn("[Warning] Can not get server gui container with id is " + ID); return null; } @Nullable @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { BrewingCraft.logger.info("Get client gui " + ID);//never show in colsole switch (ID) { case 0: return new GuiTestFluidContainer((ContainerBRC) getServerGuiElement(ID, player, world, x, y, z), player.inventory); } BrewingCraft.logger.warn("[Warning] Can not get client gui object with id is " + ID); return null; } this is my block onBlockActive method @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { final IFluidHandler fluidHandler = getFluidHandler(worldIn, pos); if (fluidHandler != null) { ItemStack heldItem = playerIn.getHeldItem(hand); if (!CapabilityUtils.hasCapability(heldItem, CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) { if (!worldIn.isRemote) { if (hasGui()) { BrewingCraft.logger.info("Open Gui " + getGui().getId());//this code line show text in colsole //BrewingCraft.openGui(playerIn, getGui(), worldIn, pos.getX(), pos.getY(), pos.getZ());//forget this is just a test code playerIn.openGui(BrewingCraft.instance, getGui().getId(), worldIn, pos.getX(), pos.getY(), pos.getZ()); } else { IFluidTankProperties[] properties = fluidHandler.getTankProperties(); StringBuilder builder = new StringBuilder(); for (IFluidTankProperties tankProperties : properties) builder.append(tankProperties.getContents().getLocalizedName() + ":" + tankProperties.getContents().amount + "/" + tankProperties.getCapacity()); playerIn.sendStatusMessage(new TextComponentString(builder.toString()), false); } } return true; } FluidUtil.interactWithFluidHandler(playerIn, hand, fluidHandler); return FluidUtil.getFluidHandler(playerIn.getHeldItem(hand)) != null; } return false; } any one know how to fix this?maybe i make some mistake in my code
-
[SLOVED][1.12.2]Problem in item with inventory and gui
tt36999 replied to tt36999's topic in Modder Support
Thanks, This is what I want to know -
I want create a item with gui, this gui will show inventory in this item. I use public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable NBTTagCompound nbt) { return new ItemInventoryProvider(limit); } this to init capalities to my item, the "ItemInventoryProvider" Instantiation a ItemStackHandler in it's construct public class ItemInventoryProvider implements ICapabilitySerializable<NBTTagCompound> { public final ItemStackHandler inventory; public ItemInventoryProvider(int size) { inventory = new ItemStackHandler(size); } @Override public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) { return capability == ITEM_HANDLER_CAPABILITY; } @Nullable @Override public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) { return hasCapability(capability, facing) ? ITEM_HANDLER_CAPABILITY.<T>cast(inventory) : null; } @Override public NBTTagCompound serializeNBT() { return inventory.serializeNBT(); } @Override public void deserializeNBT(NBTTagCompound nbt) { inventory.deserializeNBT(nbt); } } But when i want create container for my item's gui i got some problem. method addSlotToContainer(new Slot((IInventory) inventory, id, x, y)); need a IInventory to add slot, but i use IItemHandler in my item, what should i do?
-
[SOLVED]How to draw custom durable bar to item?
tt36999 replied to tt36999's topic in Modder Support
Thank guys I get what i want,mark as solved -
I have some problem whit item nbt. I created a item with some nbt data, but when i add tooltip and durability bar to the item , the tooltip and durability bar didn't update at all @Override public double getDurabilityForDisplay(ItemStack stack) { return (getDurable(stack) / getMaxDurable(stack)); } @Override public boolean showDurabilityBar(ItemStack stack) { return true; } @Override public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) { tooltip.add(I18n.format("tooltip.test") + ": " + getDurable(stack)); } These code are written in my item class this ItemStack was created by my machine, I use custom recipe handler class and add nbt tag before apply output(all these code run in server side, i use !world.isRemote to ensure all checkCanCraft , costInputItem and applyOutPut run in server) I think maybe nbt data didn't sync to client, and tried log NBT data in showDurabilityBar method when i use MOD.logger.info(getTagCompound().getCompoundTag("ma_data").toString()); console show me right nbt data string like "{"ma_data":{"Durable":1000.0}}" but when i use MOD.logger.info(getTagCompound().getCompoundTag("ma_data").getDouble("Durable"));//this line show me 0.0d in console MOD.logger.info(getTagCompound().getCompoundTag("ma_data").getTag("Durable"));// this line show me null in console I am sure of the item has correct nbt(At least in server side) What am I doing wrong?