-
Kporal changed their profile photo
-
[mc 1.12.2 - forge 14.23.5.2768] Item Inventory
I'm back from an old mod i've made for mc 1.11.2 : I've mostly restart from scratch and just rewrite all my class to create my "Bag". The problem is ... i havn't any error but nothing happend, so i think io just miss something but can't find what is wrong. Main.java package com.kporal.mcplus; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Items; import net.minecraft.init.SoundEvents; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.Item; import net.minecraft.item.Item.ToolMaterial; import net.minecraft.item.ItemArmor.ArmorMaterial; import net.minecraft.item.ItemStack; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.GameRegistry; @Mod( modid = Main.MODID, name = Main.NAME, version = Main.VERSION, acceptedMinecraftVersions = Main.MCVERSION ) public class Main { public static final String MODID = "mcplus"; public static final String NAME = "MCPlus"; public static final String VERSION = "1.0"; public static final String MCVERSION = "[1.12.2]"; public static final ArmorMaterial armorMCP = EnumHelper.addArmorMaterial( "armorMCP", MODID + ":dragoon", 1600, new int[] { 4, 8, 10, 4 }, 30, SoundEvents.ITEM_ARMOR_EQIIP_ELYTRA, 4 ).setRepairItem( new ItemStack( Items.EMERALD )); public static final ToolMaterial emeraldMCP = EnumHelper.addToolMaterial( "emeraldMCP", 4, 10000, 10.0F, 9.0F, 30 ).setRepairItem( new ItemStack( Items.EMERALD )); public static Item ehaxe, dragoonHelmet, dragoonChest, dragoonLegs, dragoonBoots, kitbag; @EventHandler public void preInit( FMLPreInitializationEvent event ) { ehaxe = new Ehaxe( emeraldMCP ); dragoonHelmet = new DragoonArmor( armorMCP, EntityEquipmentSlot.HEAD, "dragoon_helmet" ); dragoonChest = new DragoonArmor( armorMCP, EntityEquipmentSlot.CHEST, "dragoon_chest" ); dragoonLegs = new DragoonArmor( armorMCP, EntityEquipmentSlot.LEGS, "dragoon_legs" ); dragoonBoots = new DragoonArmor( armorMCP, EntityEquipmentSlot.FEET, "dragoon_boots" ); kitbag = new Kitbag(); } @EventHandler public void init( FMLInitializationEvent event ) {} } Kitbag.java package com.kporal.mcplus; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; import net.minecraftforge.common.capabilities.ICapabilityProvider; public class Kitbag extends Item { public Kitbag() { this.setRegistryName( "kitbag" ); this.setTranslationKey( "kitbag" ); this.setCreativeTab( CreativeTabs.TOOLS ); this.setMaxStackSize( 1 ); } public ActionResult<ItemStack> onItemRightClick( World w, EntityPlayer p, EnumHand e ) { //NBTTagCompound nbt = new NBTTagCompound(); //inventory.deserializeNBT( nbt ); return new ActionResult<ItemStack>( EnumActionResult.PASS, p.getHeldItemMainhand() ); } public void onPlayerStoppedUsing( ItemStack stack, World worldIn, EntityLivingBase entityLiving, int timeLeft ) { //inventory.serializeNBT(); } @Override public ICapabilityProvider initCapabilities( ItemStack item, NBTTagCompound nbt ) { if( item.getItem() == Main.kitbag ) { return new KitbagProvider(); } return null; } } KitbagProvider.java package com.kporal.mcplus; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.common.capabilities.ICapabilitySerializable; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.ItemStackHandler; public class KitbagProvider implements ICapabilityProvider, ICapabilitySerializable<NBTTagCompound> { private final ItemStackHandler inventory; public KitbagProvider() { inventory = new ItemStackHandler( 54 ); } @Override public NBTTagCompound serializeNBT() { return inventory.serializeNBT(); } public void deserializeNBT( NBTTagCompound nbt ) { inventory.deserializeNBT( nbt ); } @Override public boolean hasCapability( Capability<?> capability, EnumFacing facing ) { if( capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY ) { return true; } return false; } @Override public <T> T getCapability( Capability<T> capability, EnumFacing facing ) { if( capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY ) { return (T) inventory; } return null; } } KitbagContainer.java package com.kporal.mcplus; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.SlotItemHandler; public class KitbagContainer extends Container { public KitbagContainer( IItemHandler i, EntityPlayer p ) { int xPos = 8; int yPos = 18; int iid = 0; for( int y = 0; y < 6; ++y ) { for( int x = 0; x < 9; ++x ) { addSlotToContainer( new SlotItemHandler( i, iid, xPos + x * 18, yPos + y * 18 )); iid++; } } yPos = 140; for( int y = 0; y < 3; ++y ) { for( int x = 0; x < 9; ++x ) { addSlotToContainer( new Slot( p.inventory, x + y * 9 + 9, xPos + x * 18, yPos + y * 18 )); } } for( int x = 0; x < 9; ++x ) { addSlotToContainer( new Slot( p.inventory, x, xPos + x * 18, 198 )); } } @Override public boolean canInteractWith( EntityPlayer p ) { return true; } } KitbagGuiHandler.java package com.kporal.mcplus; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.IGuiHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; public class KitbagGuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer p, World w, int x, int y, int z) { return new KitbagContainer( (IItemHandler) p.getHeldItemMainhand().getCapability( CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null ), p ); } @Override public Object getClientGuiElement(int ID, EntityPlayer p, World w, int x, int y, int z) { return new KitbagGui( (IItemHandler) p.getHeldItemMainhand().getCapability( CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null ), p ); } } KitbagGui.java package com.kporal.mcplus; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.util.ResourceLocation; import net.minecraftforge.items.IItemHandler; public class KitbagGui extends GuiContainer { private IItemHandler i; public KitbagGui( IItemHandler i, EntityPlayer p ) { super( new KitbagContainer( i, p )); this.xSize = 175; this.ySize = 221; this.i = i; } @Override protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { GlStateManager.color( 1.0F, 1.0F, 1.0F, 1.0F ); this.mc.getTextureManager().bindTexture( new ResourceLocation( Main.MODID, "textures/gui/container/kitbag.png" ) ); this.drawTexturedModalRect( this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize ); } } The game start without any error, my item is registered, i can't take it / craft it, absolutely no issue, but nothing happend on right click, so if any one see where i'm wrong and can tell me what's my error !
-
[1.11.2] Blocks list from chunk
- [1.11.2] Blocks list from chunk
Now i'm here : ErzineConverter.class Yes i use DecorateBiomeEvent Pre and Decorate ( i've made this for testing purpose ) but, i'm in trouble, my main event for replacing block do not clear everything, sometime some flower, grass or tree is populated on my world and i don't know how to canceled that or maybe by doing a second loop ... But first, my first problem here is at the bottom, LivingSpawn, i don't understand why this not work, i've made this to prevent creature to spawn but ... i also use this on my world provider : this.setAllowedSpawnTypes( false, false ); ... And why some tree / flower / water keep on the world ... i'm trying a lot of thing but nothing seem to really clear the world- [1.11.2] Blocks list from chunk
Like you can see ... it's not yet fully operational i need to work deeper into it- [1.11.2] Blocks list from chunk
Ok it work really fine with nbt package com.kporal.lau.events; import com.kporal.lau.LAU; import net.minecraft.block.Block; import net.minecraft.block.BlockDirt; import net.minecraft.block.BlockFalling; import net.minecraft.block.BlockLiquid; import net.minecraft.block.BlockOre; import net.minecraft.block.BlockSandStone; import net.minecraft.block.BlockStone; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraftforge.event.world.ChunkEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class OnChunkEvent { //private final Block[] toNetherrack = { Blocks.SAND }; //private final Block[] toEndstone = { Blocks.END_STONE }; //private final Block[] toDestroy = { Blocks.OAK_STAIRS }; @SubscribeEvent public void EditChunk( ChunkEvent.Load e ) { World w = e.getWorld(); if( !w.isRemote && w.provider.getDimension() == LAU.ERZINEID ) { NBTTagCompound nbt = w.getWorldInfo().getDimensionData( LAU.ERZINEID ); Chunk c = e.getChunk(); String chunkid = "erzineChunk:" + c.xPosition + "_" + c.zPosition; if( nbt.hasKey( chunkid ) ) { return; } int cx = c.xPosition << 4; int cy = w.getHeight(); int cz = c.zPosition << 4; for( int x = cx - 16; x < cx; x++ ) { for( int y = 0; y < cy; y++ ) { for( int z = cz - 16; z < cz; z++ ) { BlockPos p = new BlockPos( x, y, z ); Block b = c.getBlockState( p ).getBlock(); if( b instanceof BlockFalling && b != Blocks.SOUL_SAND ) { c.setBlockState( p, Blocks.SOUL_SAND.getDefaultState() ); } if( b instanceof BlockLiquid && b != Blocks.LAVA ) { c.setBlockState( p, Blocks.LAVA.getDefaultState() ); } if(( b instanceof BlockOre || b instanceof BlockStone || b instanceof BlockSandStone ) && b != Blocks.END_STONE ) { c.setBlockState( p, Blocks.END_STONE.getDefaultState() ); } if( b instanceof BlockDirt && b != Blocks.NETHERRACK ) { c.setBlockState( p, Blocks.NETHERRACK.getDefaultState() ); } //w.destroyBlock( p, false ); } } } nbt.setBoolean( chunkid, true ); w.getWorldInfo().setDimensionData( LAU.ERZINEID, nbt ); } } } And now i need to clean up entity spawn, and decorate event, if i'm right tree is on the decorate event ? I also need to clear every structure ( with event too ... to prevent them to spawn )- [1.11.2] Blocks list from chunk
Yes, i've made some test and i think i've found a way to ensure the game do not load heavily by using nbttag when a chunk is converted, may work but for now my "converter" work ( and like you said it's pretty laggy but not everywhere almost at the first generation ). So i need to know if i can use nbttag into chunk, maybe not but in world should be better by saving something like that : chunk_0_-1_0 as id with isConverted to avoid a second convertion. But in case of needed, i'm also gonna make an admin command to re convert a chunk ! And my last possibility but actually ... i think it don't work ... changing the height of the map ... because i don't need 256 but ... should be better with 96 height trying to do it with : ErzineProvider.class package com.kporal.lau.dimensions; import com.kporal.lau.LAU; import net.minecraft.init.Biomes; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.DimensionType; import net.minecraft.world.World; import net.minecraft.world.WorldProvider; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.BiomeProviderSingle; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ErzineProvider extends WorldProvider { public World worldObj; public void registerWorldChunkManager() { this.biomeProvider = new BiomeProviderSingle( Biomes.VOID ); this.setDimension( LAU.erzineId ); this.setAllowedSpawnTypes( false, false ); this.hasNoSky = false; this.doesWaterVaporize = true; } public Biome getBiomeGenForCoords( BlockPos pos ) { return Biomes.VOID; } @Override public boolean canRespawnHere() { return false; } @Override public boolean isSurfaceWorld() { return false; } @Override public DimensionType getDimensionType() { return LAU.ERZINE_DIMENSION; } @Override public float calculateCelestialAngle( long worldTime, float partialTicks ) { return 0.0F; } @Override @SideOnly( Side.CLIENT ) public float[] calcSunriseSunsetColors( float celestialAngle, float partialTicks ) { return null; } @Override @SideOnly( Side.CLIENT ) public Vec3d getFogColor( float p_76562_1_, float p_76562_2_ ) { return new Vec3d(0.20000000298023224D, 0.029999999329447746D, 0.029999999329447746D); } @Override @SideOnly( Side.CLIENT ) public float getCloudHeight() { return 12.0F; } @SideOnly( Side.CLIENT ) public boolean doesXZShowFog( int x, int z ) { return true; } @Override public int getHeight() { return 96; } @Override public int getActualHeight() { return 96; } } But ... because my "Erzine" dimension is a "copy" of the overworld it's doesn't work ( i need to check something ... ).- [1.11.2] Blocks list from chunk
Ok so finally i check ... nothing so this is why nothing is replace ... theire is a way to get all chunk block directly ? or i need to use a for <<4 loop ?- [1.11.2] Blocks list from chunk
Actually my code is : package com.kporal.lau.events; import java.util.Map; import com.kporal.lau.LAU; import net.minecraft.block.Block; import net.minecraft.block.BlockSand; import net.minecraft.block.BlockStaticLiquid; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraftforge.event.world.ChunkEvent.Load; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class OnChunkEvent { //private final Block[] toNetherrack = { Blocks.SAND }; //private final Blocks[] toLava = { Blocks.WATER }; @SubscribeEvent public void EditChunk( Load e ) { World w = e.getWorld(); if( !w.isRemote && w.provider.getDimension() == LAU.erzineId ) { Chunk c = e.getChunk(); Map<BlockPos, TileEntity> map = c.getTileEntityMap(); for( BlockPos p : map.keySet() ) { Block b = c.getBlockState( p ).getBlock(); /*if( ArrayUtils.contains( toNetherrack, c.getBlockState( p ).getBlock() )) { c.removeTileEntity( p ); }*/ if( b instanceof BlockSand ) { // Convert to soulsand c.removeTileEntity( p ); c.setBlockState( p, Blocks.SOUL_SAND.getDefaultState() ); } if( b instanceof BlockStaticLiquid ) { // Convert to lava c.removeTileEntity( p ); c.setBlockState( p, Blocks.LAVA.getDefaultState() ); } } } } } But it doesn't work, i mean nothing happen, i register the event on the FMLInit @EventHandler public void Init( FMLInitializationEvent e ) { MinecraftForge.EVENT_BUS.register( new OnChunkEvent() ); } But i have no error at all, so i know i'm wrong because nothing happen, but i don't know where i'm wrong- [1.11.2] Blocks list from chunk
my explanation isn't good, it's not a mimic, the "erzine" ( my custom one ) doens't mimic stuff from the overworld, it was just generated with the same seed, but totally separate dimension.- [1.11.2] Blocks list from chunk
Ok, my custom dimension is a mimic of the overworld, it work, i can teleport, spawn etc, but now, because i don't use a custom chunk generator i try to use the chunk Load event to replace undesired block by other, my actual code is more like : package com.kporal.lau.events; import java.util.Map; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.chunk.Chunk; import net.minecraftforge.event.world.ChunkEvent.Load; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class OnChunkEvent { @SubscribeEvent public void EditChunk( Load e ) { Chunk c = e.getChunk(); Map<BlockPos, TileEntity> map = c.getTileEntityMap(); for( BlockPos p : map.keySet() ) { if( c.getBlockState( p ).getBlock() == Blocks.DIRT ) { c.removeTileEntity( p ); //c.addTileEntity( p, ); } } } } it's just an exemple for dirt block, but when i'm doing a better job here i'm gonna use some array, i hope to give you suffisant information ( sorry if my english is bad )- [1.11.2] Blocks list from chunk
I'm doing something like this, doesn't test it yet but i think i'm on the right way : package com.kporal.lau.events; import java.util.Map; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.chunk.Chunk; import net.minecraftforge.event.world.ChunkEvent.Load; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class OnChunkEvent { @SubscribeEvent public void EditChunk( Load e ) { Chunk c = e.getChunk(); Map<BlockPos, TileEntity> map = c.getTileEntityMap(); for( BlockPos p : map.keySet() ) { c.removeTileEntity( p ); } } } removeTileEntity may remove my desired block ? then i should replace a new block at the position, or i need to use setBlockState ?- [1.11.2] Blocks list from chunk
I've made a custom dimension, but rather than using a chunk generator, my own is just a "copy" of the overworld and i want replace some blocks by other. So i need to get a list of all block on the chunk and replacing them by the wanted block or remove them, but i don't know how to get a list of block in the chunk, maybe this way is just impossible ?- [1.11.2][Solved] Using commands serverside when client interact
I never said it was hard ^^, all my code was fine finally, the only thing i was wrong is about my leftClickEmpty event wich in case is never called serverside, this is just a stupid misstake from me, whatever, my code is good and work fine- [1.11.2][Solved] Using commands serverside when client interact
Thank for your help and sorry to wast your time, now it work both on client and server- [1.11.2][Solved] Using commands serverside when client interact
i've totally forgot this thing ... i used event because it's easier to separate item action, because here i have two action on same click but whatever going to overide onItemRightClick directly on my item, and cheking if player click block or not - [1.11.2] Blocks list from chunk
IPS spam blocked by CleanTalk.
Important Information
By using this site, you agree to our Terms of Use.