MatsCraft1
Members-
Posts
40 -
Joined
-
Last visited
Everything posted by MatsCraft1
-
[SOLVED] 1.14.4 Game crashes after adding custom armor.
MatsCraft1 replied to CuBeOnHere's topic in Modder Support
Very strange, as I do not have a solution I will just show you my code, as an example. Items: event.getRegistry().register(new ArmorItem(ModArmorMaterials.copper, EquipmentSlotType.HEAD, new Item.Properties().group(MoreStuff.morestuff_armor.GroupArmor)).setRegistryName("copper_helmet")); event.getRegistry().register(new ArmorItem(ModArmorMaterials.copper, EquipmentSlotType.CHEST, new Item.Properties().group(MoreStuff.morestuff_armor.GroupArmor)).setRegistryName("copper_chestplate")); event.getRegistry().register(new ArmorItem(ModArmorMaterials.copper, EquipmentSlotType.LEGS, new Item.Properties().group(MoreStuff.morestuff_armor.GroupArmor)).setRegistryName("copper_leggings")); event.getRegistry().register(new ArmorItem(ModArmorMaterials.copper, EquipmentSlotType.FEET, new Item.Properties().group(MoreStuff.morestuff_armor.GroupArmor)).setRegistryName("copper_boots")); Materials: public enum ModArmorMaterials implements IArmorMaterial { redtunica("redtunica", 3, new int[]{0, 0, 0, 0}, 5, Items.STRING, "item.armor.equip_leather", 0.0f), bronze("bronze", 14, new int[]{2, 4, 5, 3}, 15, null, "item.armor.equip_gold", 0.5f), copper("copper", 29, new int[]{3, 6, 5, 3}, 10, null, "item.armor.equip_iron", 0.8f); //enum private static final int[] max_damage_array = new int[]{13, 15, 16, 11}; private String name, equipSound; private int durability, enchantibility; private int[] damageReductionAmounts; private Item repairItem; private float toughness; private ModArmorMaterials(String name, int durability, int[] damageReductionAmounts, int enchantibility, Item repairItem, String equipSound, float toughness) { this.name = name; this.equipSound = equipSound; this.durability = durability; this.enchantibility = enchantibility; this.damageReductionAmounts = damageReductionAmounts; this.repairItem = repairItem; this.toughness = toughness; } @Override public int getDurability(EquipmentSlotType slot) { return max_damage_array[slot.getIndex()] * this.durability; } @Override public int getDamageReductionAmount(EquipmentSlotType slot) { return this.damageReductionAmounts[slot.getIndex()]; } @Override public int getEnchantability() { return this.enchantibility; } @Override public SoundEvent getSoundEvent() { return new SoundEvent(new ResourceLocation(equipSound)); } @Override public Ingredient getRepairMaterial() { return Ingredient.fromItems(this.repairItem); } @Override public String getName() { return MoreStuff.MODID + ":" + this.name; } @Override public float getToughness() { return this.toughness; } } you should check everything. I hope this is able to help you -
I don't know, but that's what the error says.
-
Already did that, it told me that it doesn't have type parameters but it needs to implement SurfaceBuilderConfig
-
So I tried this... @SubscribeEvent public static void onSurfaceRegistry(final RegistryEvent.Register<SurfaceBuilderConfig<SurfaceBuilderConfig>> event) { event.getRegistry().register(new SurfaceBuilderConfig(ModBlocks.MARBLEGRASS.getDefaultState(), ModBlocks.MARBLEDIRT.getDefaultState(), ModBlocks.MARBLEGRAVEL.getDefaultState())); } but it gives me an Error at "SurfaceBuilderConfig<SurfaceBuilderConfig>>, I have no idea what to put there lol. Also how can I use the SurfaceBuilder after registering it?
-
thank you, got it working!
-
uhmm where?
-
(SOLVED)[1.14.4] TileEntity Register Error
MatsCraft1 replied to Blu_Nighttime's topic in Modder Support
Here is my code, maybe it can help you. @SubscribeEvent public static void onTileEntityRegistry(final RegistryEvent.Register<TileEntityType<?>> event) { event.getRegistry().register(Builder.create(ContainerBarrelTile::new, ModBlocks.CONTAINEBARRELBLOCK).build(null).setRegistryName("oak_barrel")); } -
Okay, I'll try to help you. What commands did you run while installing your workspace / how did you set it up?
-
I made a peat block that should become wet when near water, just like a farmland block. Somehow this is not working, I also tried increasing the random tick speed. package com.aug15.morestuff.blocks.Misc; import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.block.material.MaterialColor; import net.minecraft.entity.Entity; import net.minecraft.pathfinding.PathType; import net.minecraft.state.IntegerProperty; import net.minecraft.state.StateContainer; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tags.FluidTags; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import java.util.Random; public class PeatBlock extends Block { public static final IntegerProperty MOISTURE = BlockStateProperties.MOISTURE_0_7; protected static final VoxelShape SHAPE = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 14.0D, 16.0D); public PeatBlock() { super(Properties.create(Material.EARTH, MaterialColor.DIRT) .sound(SoundType.GROUND) .hardnessAndResistance(4.6f) ); setRegistryName("peat"); this.setDefaultState(this.stateContainer.getBaseState().with(MOISTURE, Integer.valueOf(0))); } @Override public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { if (facing == Direction.UP && !stateIn.isValidPosition(worldIn, currentPos)) { worldIn.getPendingBlockTicks().scheduleTick(currentPos, this, 1); } return super.updatePostPlacement(stateIn, facing, facingState, worldIn, currentPos, facingPos); } @Override public boolean func_220074_n(BlockState state) { return true; } @Override public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { return SHAPE; } public static void becomeDry(BlockState state, World worldIn, BlockPos pos) { worldIn.setBlockState(pos, nudgeEntitiesWithNewState(state, Blocks.DIRT.getDefaultState(), worldIn, pos)); } private static boolean hasWater(IWorldReader worldIn, BlockPos pos) { for(BlockPos blockpos : BlockPos.getAllInBoxMutable(pos.add(-6, -6, -6), pos.add(6, 6, 6))) { if (worldIn.getFluidState(blockpos).isTagged(FluidTags.WATER)) { return true; } } return net.minecraftforge.common.FarmlandWaterManager.hasBlockWaterTicket(worldIn, pos); } @Override public void tick(BlockState state, World worldIn, BlockPos pos, Random random) { if (!state.isValidPosition(worldIn, pos)) { becomeDry(state, worldIn, pos); } else { int i = state.get(MOISTURE); if (!hasWater(worldIn, pos) && !worldIn.isRainingAt(pos.up())) { if (i > 0) { worldIn.setBlockState(pos, state.with(MOISTURE, Integer.valueOf(i - 1)), 2); } } else if (i < 7) { worldIn.setBlockState(pos, state.with(MOISTURE, Integer.valueOf(7)), 2); } } } @Override public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { entityIn.setMotion(entityIn.getMotion().mul(0.4D, 1.0D, 0.4D)); } @Override public boolean isNormalCube(BlockState state, IBlockReader worldIn, BlockPos pos) { return true; } protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) { builder.add(MOISTURE); } @Override public boolean allowsMovement(BlockState state, IBlockReader worldIn, BlockPos pos, PathType type) { return false; } }
-
[1.14.2/1.14.4] My TileEntity is crashing
MatsCraft1 replied to MatsCraft1's topic in Modder Support
I'll do that, thank you -
[1.14.2/1.14.4] My TileEntity is crashing
MatsCraft1 replied to MatsCraft1's topic in Modder Support
Got it working! I did this: public class ContainerBarrelContainer extends Container { private TileEntity tileEntity; private PlayerEntity playerEntity; private IItemHandler playerInventory; public ContainerBarrelContainer(int windowId, World world, BlockPos pos, PlayerInventory playerInventory, PlayerEntity player) { super(ModBlocks.CONTAINEBARRELCONTAINER, windowId); tileEntity = world.getTileEntity(pos); this.playerEntity = player; this.playerInventory = new InvWrapper(playerInventory); tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(h -> { addSlot(new SlotItemHandler(h, 0, 64, 24)); }); layoutPlayerInventorySlots(10, 70); } -
[1.14.2/1.14.4] My TileEntity is crashing
MatsCraft1 replied to MatsCraft1's topic in Modder Support
package com.aug15.morestuff.blocks.containers; import com.aug15.morestuff.blocks.ModBlocks; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.Container; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IWorldPosCallable; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.SlotItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; public class ContainerBarrelContainer extends Container { private TileEntity tileEntity; private PlayerEntity playerEntity; private IItemHandler playerInventory; public ContainerBarrelContainer(int windowId, World world, BlockPos pos, PlayerInventory playerInventory, PlayerEntity player) { super(ModBlocks.CONTAINEBARRELCONTAINER, windowId); TileEntity tileEntity = world.getTileEntity(pos); this.playerEntity = player; this.playerInventory = new InvWrapper(playerInventory); tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).ifPresent(h -> { addSlot(new SlotItemHandler(h, 0, 64, 24)); }); layoutPlayerInventorySlots(10, 70); } private int addSlotRange(IItemHandler handler, int index, int x, int y, int amount, int dx) { for (int i = 0 ; i < amount ; i++) { addSlot(new SlotItemHandler(handler, index, x, y)); x += dx; index++; } return index; } private int addSlotBox(IItemHandler handler, int index, int x, int y, int horAmount, int dx, int verAmount, int dy) { for (int j = 0 ; j < verAmount ; j++) { index = addSlotRange(handler, index, x, y, horAmount, dx); y += dy; } return index; } private void layoutPlayerInventorySlots(int leftCol, int topRow) { // Player inventory addSlotBox(playerInventory, 9, leftCol, topRow, 9, 18, 3, 18); // Hotbar topRow += 58; addSlotRange(playerInventory, 0, leftCol, topRow, 9, 18); } @Override public boolean canInteractWith(PlayerEntity playerIn) { return isWithinUsableDistance(IWorldPosCallable.of(tileEntity.getWorld(), tileEntity.getPos()), playerEntity, ModBlocks.CONTAINEBARRELBLOCK); } } I think I should also mention that the gui shows up for a second -
[1.14.2/1.14.4] My TileEntity is crashing
MatsCraft1 replied to MatsCraft1's topic in Modder Support
So I updated it. this is the piece of code @Override public boolean canInteractWith(PlayerEntity playerIn) { return isWithinUsableDistance(IWorldPosCallable.of(tileEntity.getWorld(), tileEntity.getPos()), playerEntity, ModBlocks.CONTAINEBARRELBLOCK); } -
Why is it?
-
Oh my god, thank you! That was the problem!
-
I deleted this
-
If I did that, how would I make it have its own custom BlockItem?
-
log on dropbox, was too big lol
-
My block still has the error texture ':)