• Recently Browsing

    No registered users viewing this page.

  • Posts

    • You aren't supposed to modify the original loot table json when using Loot Modifiers.
    • I am trying to get a loot table for a mob so that, when it is burned to death, to drop cooked meat. Otherwise, drop raw meat. Here is the JSON file for my mob:      {         "pools": [             {                 "rolls": 1,                 "entries": [                     {                         "type": "item",                         "name": "mtm:raw_turkey_breast",                         "weight": 100,                         "functions": [                             {                                 "function": "set_count",                                 "count": 1                             },                             {                                 "function": "looting_enchant",                                 "count": {                                     "min": 0,                                     "max": 1                                 }                             }                         ],                         "conditions":[                             {                                 "condition": "entity_properties",                                 "entity": "this",                                 "properties": {                                     "on_fire": false                                 }                             }                         ]                     }                 ]             },             {                 "rolls": 1,                 "entries": [                     {                         "type": "item",                         "name": "mtm:cooked_turkey_breast",                         "weight": 100,                         "functions": [                             {                                 "function": "set_count",                                 "count": 1                             },                             {                                 "function": "looting_enchant",                                 "count": {                                     "min": 0,                                     "max": 1                                 }                             }                         ],                         "conditions":[                             {                                 "condition": "entity_properties",                                 "entity": "this",                                 "properties": {                                     "on_fire": true                                 }                             }                         ]                     }                 ]             },             {                 "rolls": 1,                 "entries": [                     {                         "type": "item",                         "name": "mtm:raw_turkey_drumstick",                         "weight": 100,                         "functions": [                             {                                 "function": "set_count",                                 "count": {                                     "min": 0,                                     "max": 2                                 }                             },                             {                                 "function": "looting_enchant",                                 "count": {                                     "min": 0,                                     "max": 1                                 }                             }                         ],                         "conditions":[                             {                                 "condition": "entity_properties",                                 "entity": "this",                                 "properties": {                                     "on_fire": false                                 }                             }                         ]                     }                 ]             },             {                 "rolls": 1,                 "entries": [                     {                         "type": "item",                         "name": "mtm:cooked_turkey_drumstick",                         "weight": 100,                         "functions": [                             {                                 "function": "set_count",                                 "count": {                                     "min": 0,                                     "max": 2                                 }                             },                             {                                 "function": "looting_enchant",                                 "count": {                                     "min": 0,                                     "max": 1                                 }                             }                         ],                         "conditions":[                             {                                 "condition": "entity_properties",                                 "entity": "this",                                 "properties": {                                     "on_fire": true                                 }                             }                         ]                     }                 ]             }         ]     }    I am looking for one turkey breast and 0-2 drumsticks to drop 100% of the time. This file is saved under assets.mtm.loot\_tables as turkey.json. Here is my loot table handler class:        public class LootTableHandler     {         public static final ResourceLocation TURKEY = LootTableList.register(new ResourceLocation(Reference.MOD_ID, "turkey"));     }    And I have this in my EntityTurkey class:        @Nullable         protected ResourceLocation getLootTable()         {             return LootTableHandler.TURKEY;         }
    • I am working on a boar in Minecraft, and it was all going smoothly until I tried to code it to attack when it was attacked. I've spent about 6 hours of browsing the Internet and just toying with the tasks and AI to get something working, and nothing happened besides crashes when I summoned it, it not summoning at all, or it being summoned, but just as a passive mob. The Model and Render classes work just fine, the entity showed up in the game and worked fine up to the point when I added the walking and head animations. So, I will link the EntityBoar file only, unless you need to see the Model and Render classes. With this code in particular, the game continues to run even after attempting to summon the Boar, but Boar won't summon. I am working on Forge 1.12.2. Thanks   package com.dmh10s.morethingsmod.entity;          import java.util.Set;     import java.util.UUID;          import javax.annotation.Nullable;          import com.dmh10s.morethingsmod.init.ModItems;     import com.google.common.collect.Sets;          import net.minecraft.block.Block;     import net.minecraft.enchantment.EnchantmentHelper;     import net.minecraft.entity.Entity;     import net.minecraft.entity.EntityAgeable;     import net.minecraft.entity.EntityCreature;     import net.minecraft.entity.EntityLiving;     import net.minecraft.entity.EntityLivingBase;     import net.minecraft.entity.IEntityLivingData;     import net.minecraft.entity.SharedMonsterAttributes;     import net.minecraft.entity.ai.EntityAIAttackMelee;     import net.minecraft.entity.ai.EntityAIFollow;     import net.minecraft.entity.ai.EntityAIFollowParent;     import net.minecraft.entity.ai.EntityAIHurtByTarget;     import net.minecraft.entity.ai.EntityAILookIdle;     import net.minecraft.entity.ai.EntityAIMate;     import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction;     import net.minecraft.entity.ai.EntityAINearestAttackableTarget;     import net.minecraft.entity.ai.EntityAIPanic;     import net.minecraft.entity.ai.EntityAISwimming;     import net.minecraft.entity.ai.EntityAITarget;     import net.minecraft.entity.ai.EntityAITempt;     import net.minecraft.entity.ai.EntityAIWanderAvoidWater;     import net.minecraft.entity.ai.EntityAIWatchClosest;     import net.minecraft.entity.ai.attributes.AttributeModifier;     import net.minecraft.entity.ai.attributes.IAttributeInstance;     import net.minecraft.entity.effect.EntityLightningBolt;     import net.minecraft.entity.monster.EntityMob;     import net.minecraft.entity.monster.EntityPigZombie;     import net.minecraft.entity.monster.EntityZombie;     import net.minecraft.entity.passive.EntityAnimal;     import net.minecraft.entity.passive.EntityPig;     import net.minecraft.entity.player.EntityPlayer;     import net.minecraft.init.Items;     import net.minecraft.init.SoundEvents;     import net.minecraft.inventory.EntityEquipmentSlot;     import net.minecraft.item.Item;     import net.minecraft.item.ItemStack;     import net.minecraft.nbt.NBTTagCompound;     import net.minecraft.network.datasync.DataParameter;     import net.minecraft.network.datasync.DataSerializers;     import net.minecraft.network.datasync.EntityDataManager;     import net.minecraft.util.DamageSource;     import net.minecraft.util.EnumHand;     import net.minecraft.util.ResourceLocation;     import net.minecraft.util.SoundEvent;     import net.minecraft.util.datafix.DataFixer;     import net.minecraft.util.math.BlockPos;     import net.minecraft.util.math.MathHelper;     import net.minecraft.world.EnumDifficulty;     import net.minecraft.world.World;     import net.minecraft.world.storage.loot.LootTableList;          public class EntityBoar extends EntityAnimal          {         private static final Set<Item> TEMPTATION_ITEMS = Sets.newHashSet(ModItems.CABBAGE, Items.CHICKEN, ModItems.RAW_TURKEY_BREAST);         private EntityLivingBase attackTarget;         boolean callInReinforcements = false;              public EntityBoar(World worldIn)         {             super(worldIn);             this.setSize(0.9F, 0.9F);             this.stepHeight = 1.0F;         }                  protected void initEntityAI()         {             this.tasks.addTask(5, new EntityAISwimming(this));             this.tasks.addTask(2, new EntityAITempt(this, 1.2D, false, TEMPTATION_ITEMS));             this.tasks.addTask(3, new EntityAIWanderAvoidWater(this, 1.0D));             this.tasks.addTask(4, new EntityAIWatchClosest(this, EntityPlayer.class, 10.0F));             this.tasks.addTask(6, new EntityAILookIdle(this));         }              protected void applyEntityAttributes()         {             super.applyEntityAttributes();             this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(14.0D);             this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.2D);             this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(4.0D);             this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(25.0D);         }              public static void registerFixesBoar(DataFixer fixer)         {             EntityLiving.registerFixesMob(fixer, EntityBoar.class);         }                  public boolean attackEntityFrom(DamageSource source, float amount)         {             if (super.attackEntityFrom(source, amount))             {                 EntityLivingBase entitylivingbase = this.getAttackTarget();                      if (entitylivingbase == null && source.getTrueSource() instanceof EntityLivingBase)                 {                     entitylivingbase = (EntityLivingBase)source.getTrueSource();                 }                                  this.setAttackTarget(entitylivingbase);                      return true;             }             else             {                 return false;             }         }                  @Override         public boolean attackEntityAsMob(Entity entityIn)         {             float f = (float)this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue();             int i = 0;                  if (entityIn instanceof EntityLivingBase)             {                 f += EnchantmentHelper.getModifierForCreature(this.getHeldItemMainhand(), ((EntityLivingBase)entityIn).getCreatureAttribute());                 i += EnchantmentHelper.getKnockbackModifier(this);             }                  boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), f);                  if (flag)             {                 if (i > 0 && entityIn instanceof EntityLivingBase)                 {                     ((EntityLivingBase)entityIn).knockBack(this, (float)i * 0.5F, (double)MathHelper.sin(this.rotationYaw * 0.017453292F), (double)(-MathHelper.cos(this.rotationYaw * 0.017453292F)));                     this.motionX *= 0.6D;                     this.motionZ *= 0.6D;                 }                      int j = EnchantmentHelper.getFireAspectModifier(this);                      if (j > 0)                 {                     entityIn.setFire(j * 4);                 }                      if (entityIn instanceof EntityPlayer)                 {                     EntityPlayer entityplayer = (EntityPlayer)entityIn;                     ItemStack itemstack = this.getHeldItemMainhand();                     ItemStack itemstack1 = entityplayer.isHandActive() ? entityplayer.getActiveItemStack() : ItemStack.EMPTY;                          if (!itemstack.isEmpty() && !itemstack1.isEmpty() && itemstack.getItem().canDisableShield(itemstack, itemstack1, entityplayer, this) && itemstack1.getItem().isShield(itemstack1, entityplayer))                     {                         float f1 = 0.25F + (float)EnchantmentHelper.getEfficiencyModifier(this) * 0.05F;                              if (this.rand.nextFloat() < f1)                         {                             entityplayer.getCooldownTracker().setCooldown(itemstack1.getItem(), 100);                             this.world.setEntityState(entityplayer, (byte)30);                         }                     }                 }                      this.applyEnchantments(this, entityIn);             }             return flag;         }              protected SoundEvent getAmbientSound()         {             return SoundEvents.ENTITY_PIG_AMBIENT;         }              protected SoundEvent getHurtSound(DamageSource damageSourceIn)         {             return SoundEvents.ENTITY_PIG_HURT;         }              protected SoundEvent getDeathSound()         {             return SoundEvents.ENTITY_PIG_DEATH;         }              protected void playStepSound(BlockPos pos, Block blockIn)         {             this.playSound(SoundEvents.ENTITY_PIG_STEP, 0.15F, 1.0F);         }              public boolean processInteract(EntityPlayer player, EnumHand hand)         {             if (!super.processInteract(player, hand))             {                 ItemStack itemstack = player.getHeldItem(hand);                      if (itemstack.getItem() == Items.NAME_TAG)                 {                     itemstack.interactWithEntity(player, this, hand);                     return true;                 }                 else                 {                     return false;                 }             }             else             {                 return true;             }         }              /**          * Called when the mob's health reaches 0.          */         public void onDeath(DamageSource cause)         {             super.onDeath(cause);         }              @Nullable         protected ResourceLocation getLootTable()         {             return null; //YOU NEED TO MAKE CUSTOM LOOT TABLES FOR THE BOAR         }              public EntityBoar createChild(EntityAgeable ageable)         {             return new EntityBoar(this.world);         }              public boolean isBreedingItem(ItemStack stack)         {             return TEMPTATION_ITEMS.contains(stack.getItem());         }                  public float getEyeHeight()         {             return 0.7F;         }     }    
    • I'm having issues modifying the loot table specifically for the coral blocks. I have a global loot modifier set up that works for other blocks (cobblestone, gravel, etc), however it does not work on the coral blocks. I assume that it has something to do with the conditions already set in the loot table. I notice that when I mine coral blocks with a silk touch pickaxe my loot modifier is run, but when attempting to mine it with a custom item (my hammer) it does not work. I attempted to modify the table as follows: { "type": "minecraft:block", "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:alternatives", "children": [ { "type": "minecraft:item", "conditions": [ { "condition": "minecraft:alternative", "terms": [ { "condition": "minecraft:match_tool", "predicate": { "tag": "exnihilosequentia:hammer" } }, { "condition": "minecraft:match_tool", "predicate": { "enchantments": [ { "enchantment": "minecraft:silk_touch", "levels": { "min": 1 } } ] } } ] } ], "name": "minecraft:tube_coral_block" }, { "type": "minecraft:item", "conditions": [ { "condition": "minecraft:survives_explosion" } ], "name": "minecraft:dead_tube_coral_block" } ] } ] } ] }   For the predicate that I added, I did add the tag I specified and my items are registered to that tag.   What am I missing to get this to work?   (Also, sorry about the big code block, I've forgotten how to do spoilers....)
    • I moved it to ClientProxy like so: package com.budrunbun.lavalamp.proxy; import com.budrunbun.lavalamp.container.ModContainers; import com.budrunbun.lavalamp.renderer.DisplayFreezerRenderer; import com.budrunbun.lavalamp.renderer.ShelfBlockRenderer; import com.budrunbun.lavalamp.screen.CheeseGeneratorScreen; import com.budrunbun.lavalamp.tileentity.DisplayFreezerTileEntity; import com.budrunbun.lavalamp.tileentity.ShelfTileEntity; import net.minecraft.client.gui.ScreenManager; import net.minecraftforge.fml.client.registry.ClientRegistry; public class ClientProxy implements IProxy { @Override public void init() { ScreenManager.registerFactory(ModContainers.CHEESE_GENERATOR_CONTAINER, CheeseGeneratorScreen::new); ClientRegistry.bindTileEntitySpecialRenderer(ShelfTileEntity.class, new ShelfBlockRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(DisplayFreezerTileEntity.class, new DisplayFreezerRenderer()); } } but error is the same
  • Topics

  • Who's Online (See full list)