Jump to content

EnderUnknown

Members
  • Posts

    33
  • Joined

  • Last visited

Everything posted by EnderUnknown

  1. I made a custom type of recipe to use with my tile entity. The tile entity acts similar to a furnace, but not enough to use a abstract furnace recipe or whatever it is a called. The issue is that when I start smelting materials using it, within the first stack of items, seemingly at random, the recipe's ingredients and outputs become null/ItemStack#EMPTY. I know the recipe isn't null as it's id shows properly when logged to the console. If I use the reload command to reload the game data, the broken recipes then work again for another few items until then they break again. Intriguingly, it is as though the recipe breaks not the tileentity as if a recipe breaks in one of my tile entities, then I cannot use said recipe again (without a reload) in any other in the world. Also, if I try a different recipe, the tile entity will process the materials correctly until that recipe breaks too. I don't know why the recipes are being modified at runtime. Any help would be appreciated, Thanks!
  2. I don't believe 1.7.10 is supported on these forums anymore.
  3. I wasn't able to get it to work with that, but it did prompt me to see where the vanilla renderer renders the overlays and interestingly enough, it is in the renderHand method. So, I was able to use the RenderHandEvent to get it working! Unfortunately, it won't render if the player disables their HUD but since I can't make Vanilla trigger my own event it will have to do. Thanks again!
  4. I have been working on a fire-like effect and I would like it to work like fire in the sense that it overlays the player's screen in first person. I have found how Vanilla does it in the OverlayRenderer class but I am unsure of what event to subscribe to for this interaction. It seems as though the RenderBlockOverlayEvent would be the ideal choice, but looking at how it is implemented in the OverlayRenderer class makes me think this is not viable as it only is called if the player is suffocating, burning, or underwater. Any suggestions? Thanks!
  5. I am new to Git, so I appreciate that you made me aware of the .gitignore file. I am going to learn fully learn git and make a new Repo for my project before I ask any more complex questions. As for the logic, I can't believe that I missed that. Thanks!
  6. Okay, I have changed the EntityEvent to LivingUpdateEvent. Additionally I have removed @OnlyIn. I am not sure what locations that I have overridden methods without using the @Override annotation, but I will look into that. As for copy-pasting MC code, I will work to be better about changing the names where possible. (Hopefully the new mappings/mapping system will be ready soon...) Finally, the Git repo is here. Thanks!
  7. Hello, it is me again . I have been working on a custom burning mechanic for entities that are unfortunate enough to collide with Cursed Flames. However, for whatever reason, the fire timer doesn't set properly. For example, the cursed flame block tries to set an entity on cursed fire for 8 second (or 160 ticks). When I step in the fire, it only sets it for 1 or 2 ticks, seeming at random, so the effect isn't achieved. I am trying to make it mimic vanilla burning behavior for now, but I am going to change the damage amount and some other things later. Any suggestions on how to fix it? Cursed Flames Data package com.enderunknown.corruption.capabilities; import net.minecraft.nbt.INBT; import net.minecraft.nbt.IntNBT; import net.minecraft.util.Direction; import net.minecraftforge.common.capabilities.Capability; public class CursedFlames { private int cursedFlameTimer; public CursedFlames() { this(0); } public CursedFlames(int fireTimer) { cursedFlameTimer=fireTimer; } public int getFlameTimer() {return cursedFlameTimer;} public void setFlameTimer(int fireTimer) { if(cursedFlameTimer < fireTimer * 20) cursedFlameTimer = fireTimer * 20; } public void forceSetFlameTimer(int newValue) {cursedFlameTimer=newValue;} public Boolean isMelting() {return cursedFlameTimer>0;} public void extinguish() {cursedFlameTimer=0;} public static class CursedFlamesNBTStorage implements Capability.IStorage<CursedFlames>{ @Override public INBT writeNBT(Capability<CursedFlames> capability, CursedFlames instance, Direction side) { IntNBT intNBT = IntNBT.valueOf(instance.cursedFlameTimer); return intNBT; } @Override public void readNBT(Capability<CursedFlames> capability, CursedFlames instance, Direction side, INBT nbt) { int fTimer = 0; if(nbt.getType()==IntNBT.TYPE) { fTimer = ((IntNBT)nbt).getInt(); } instance.forceSetFlameTimer(fTimer); } } public static CursedFlames createADefaultInstance() { return new CursedFlames(); } } Cursed Flames Burn, triggered every time an entity ticks package com.enderunknown.corruption.capabilities; import com.enderunknown.corruption.Corruption; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.DamageSource; import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; public class CursedFlamesBurn { @SubscribeEvent public static void onEntityTick(EntityEvent event) { Entity entity = event.getEntity(); if(entity instanceof LivingEntity) { CursedFlames cursedFlames = entity.getCapability(CapabilityCursedFlames.CAPABILITY_CURSED_FLAMES).orElse(null); if(cursedFlames==null)return; //Test for and handle cursed flames and then damage entity if(entity instanceof PlayerEntity) Corruption.LOGGER.info(cursedFlames.getFlameTimer() + " " + entity.getFireTimer()); if(entity.world.isRemote){cursedFlames.extinguish();} else if(cursedFlames.getFlameTimer()>0) { cursedFlames.forceSetFlameTimer(cursedFlames.getFlameTimer()-4); if(cursedFlames.getFlameTimer()<0) cursedFlames.extinguish(); else { if(cursedFlames.getFlameTimer() % 20 == 0) { entity.attackEntityFrom(DamageSource.ON_FIRE, 1.0F); } cursedFlames.forceSetFlameTimer(cursedFlames.getFlameTimer()-1); } } } } } AbstractCursedFlames (The effect is applied in the entity collision function) package com.enderunknown.corruption.block; import java.util.Random; import com.enderunknown.corruption.capabilities.CapabilityCursedFlames; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.NetherPortalBlock; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItemUseContext; import net.minecraft.particles.ParticleTypes; import net.minecraft.util.DamageSource; import net.minecraft.util.Direction; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvents; 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.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; public abstract class AbstractCursedFlames extends Block { private final float field_235325_g_; protected static final VoxelShape field_235319_a_ = Block.makeCuboidShape(0.0D, 15.0D, 0.0D, 16.0D, 16.0D, 16.0D); protected static final VoxelShape field_235320_b_ = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D); protected static final VoxelShape field_235321_c_ = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 1.0D, 16.0D, 16.0D); protected static final VoxelShape field_235322_d_ = Block.makeCuboidShape(15.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D); protected static final VoxelShape field_235323_e_ = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 1.0D); protected static final VoxelShape field_235324_f_ = Block.makeCuboidShape(0.0D, 0.0D, 15.0D, 16.0D, 16.0D, 16.0D); public AbstractCursedFlames(AbstractBlock.Properties p_i241173_1_, float p_i241173_2_) { super(p_i241173_1_); this.field_235325_g_ = p_i241173_2_; } public BlockState getStateForPlacement(BlockItemUseContext context) { return func_235326_a_(context.getWorld(), context.getPos()); } public static BlockState func_235326_a_(IBlockReader p_235326_0_, BlockPos p_235326_1_) { return ((CursedFlames)BlockRegistry.CURSED_FLAMES).getStateForPlacement(p_235326_0_, p_235326_1_); } public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { return field_235320_b_; } /** * Called periodically clientside on blocks near the player to show effects (like furnace fire particles). Note that * this method is unrelated to {@link randomTick} and {@link #needsRandomTick}, and will always be called regardless * of whether the block can receive random update ticks */ @OnlyIn(Dist.CLIENT) public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) { if (rand.nextInt(24) == 0) { worldIn.playSound((double)pos.getX() + 0.5D, (double)pos.getY() + 0.5D, (double)pos.getZ() + 0.5D, SoundEvents.BLOCK_FIRE_AMBIENT, SoundCategory.BLOCKS, 1.0F + rand.nextFloat(), rand.nextFloat() * 0.7F + 0.3F, false); } BlockPos blockpos = pos.down(); BlockState blockstate = worldIn.getBlockState(blockpos); if (!this.canBurn(blockstate) && !blockstate.isSolidSide(worldIn, blockpos, Direction.UP)) { if (this.canBurn(worldIn.getBlockState(pos.west()))) { for(int j = 0; j < 2; ++j) { double d3 = (double)pos.getX() + rand.nextDouble() * (double)0.1F; double d8 = (double)pos.getY() + rand.nextDouble(); double d13 = (double)pos.getZ() + rand.nextDouble(); worldIn.addParticle(ParticleTypes.LARGE_SMOKE, d3, d8, d13, 0.0D, 0.0D, 0.0D); } } if (this.canBurn(worldIn.getBlockState(pos.east()))) { for(int k = 0; k < 2; ++k) { double d4 = (double)(pos.getX() + 1) - rand.nextDouble() * (double)0.1F; double d9 = (double)pos.getY() + rand.nextDouble(); double d14 = (double)pos.getZ() + rand.nextDouble(); worldIn.addParticle(ParticleTypes.LARGE_SMOKE, d4, d9, d14, 0.0D, 0.0D, 0.0D); } } if (this.canBurn(worldIn.getBlockState(pos.north()))) { for(int l = 0; l < 2; ++l) { double d5 = (double)pos.getX() + rand.nextDouble(); double d10 = (double)pos.getY() + rand.nextDouble(); double d15 = (double)pos.getZ() + rand.nextDouble() * (double)0.1F; worldIn.addParticle(ParticleTypes.LARGE_SMOKE, d5, d10, d15, 0.0D, 0.0D, 0.0D); } } if (this.canBurn(worldIn.getBlockState(pos.south()))) { for(int i1 = 0; i1 < 2; ++i1) { double d6 = (double)pos.getX() + rand.nextDouble(); double d11 = (double)pos.getY() + rand.nextDouble(); double d16 = (double)(pos.getZ() + 1) - rand.nextDouble() * (double)0.1F; worldIn.addParticle(ParticleTypes.LARGE_SMOKE, d6, d11, d16, 0.0D, 0.0D, 0.0D); } } if (this.canBurn(worldIn.getBlockState(pos.up()))) { for(int j1 = 0; j1 < 2; ++j1) { double d7 = (double)pos.getX() + rand.nextDouble(); double d12 = (double)(pos.getY() + 1) - rand.nextDouble() * (double)0.1F; double d17 = (double)pos.getZ() + rand.nextDouble(); worldIn.addParticle(ParticleTypes.LARGE_SMOKE, d7, d12, d17, 0.0D, 0.0D, 0.0D); } } } else { for(int i = 0; i < 3; ++i) { double d0 = (double)pos.getX() + rand.nextDouble(); double d1 = (double)pos.getY() + rand.nextDouble() * 0.5D + 0.5D; double d2 = (double)pos.getZ() + rand.nextDouble(); worldIn.addParticle(ParticleTypes.LARGE_SMOKE, d0, d1, d2, 0.0D, 0.0D, 0.0D); } } } protected abstract boolean canBurn(BlockState p_196446_1_); public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { com.enderunknown.corruption.capabilities.CursedFlames cursedFlames = entityIn.getCapability(CapabilityCursedFlames.CAPABILITY_CURSED_FLAMES).orElse(null); if(cursedFlames==null) return; cursedFlames.forceSetFlameTimer(cursedFlames.getFlameTimer() + 1); if (cursedFlames.getFlameTimer() == 0) { cursedFlames.setFlameTimer(8); } //entityIn.attackEntityFrom(DamageSource.IN_FIRE, this.field_235325_g_); super.onEntityCollision(state, worldIn, pos, entityIn); } private static void setCursedFlames(Entity entity, int fireTime) { com.enderunknown.corruption.capabilities.CursedFlames cursedFlames = entity.getCapability(CapabilityCursedFlames.CAPABILITY_CURSED_FLAMES).orElse(null); if(cursedFlames==null) return; cursedFlames.setFlameTimer(fireTime); } public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { if (!oldState.isIn(state.getBlock())) { if (worldIn.func_234923_W_() != World.field_234918_g_ && worldIn.func_234923_W_() != World.field_234919_h_ || !NetherPortalBlock.trySpawnPortal(worldIn, pos)) { if (!state.isValidPosition(worldIn, pos)) { worldIn.removeBlock(pos, false); } } } } /** * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually collect * this block */ public void onBlockHarvested(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) { if (!worldIn.isRemote()) { worldIn.playEvent((PlayerEntity)null, 1009, pos, 0); } } public static boolean func_241465_a_(IWorld p_241465_0_, BlockPos p_241465_1_) { BlockState blockstate = p_241465_0_.getBlockState(p_241465_1_); BlockState blockstate1 = func_235326_a_(p_241465_0_, p_241465_1_); return blockstate.isAir() && (blockstate1.isValidPosition(p_241465_0_, p_241465_1_) || func_241466_b_(p_241465_0_, p_241465_1_)); } private static boolean func_241466_b_(IWorld p_241466_0_, BlockPos p_241466_1_) { for(Direction direction : Direction.Plane.HORIZONTAL) { if (p_241466_0_.getBlockState(p_241466_1_.offset(direction)).isIn(Blocks.OBSIDIAN) && NetherPortalBlock.isPortal(p_241466_0_, p_241466_1_) != null) { return true; } } return false; } } Thanks!
  8. Indeed that worked. Thank you for taking the time to explain it to me!
  9. How would I go about doing that with the block? Or do you know where I could find an example? I really haven't done much with block rendering. Do I need to make a model or a special renderer class or something? Thanks!
  10. Does anyone know why this may be rendering improperly? I essentially have just duplicated vanilla fire and made it purple but it has a strange light purple render layer or something visible behind the Cursed Flames' texture. There are no model/render issues in the log. Picture: (Cursed Flames, next to Soul Fire, and normal Fire)
  11. I have been trying to use a GlobalLootModifer to add a new item to the Strider's loot table. However, since it seems as there is no existing loot condition that checks the type of entity (minecraft:strider), it adds my item as a possible drop off of any entity. Because of this, I am trying to make my own LootCondition that checks the entity type, but the problem is that I get a message that says minecraft:entity_slain is unrecognized when it parses my JSON file. I believe this is because it is being registered improperly. Forge doesn't have a registry for LootConditionType so I had to use the vanilla one but is still won't work. If anyone has a solution OR an alternative I would greatly appreciate it! Here's the code: JSON { "type":"corruption:strider_socks", "conditions": [ { "condition":"minecraft:random_chance_with_looting", "chance":0.5, "looting_multiplier":0.2 }, { "condition": "minecraft:entity_slain", "entity":"minecraft:strider" } ], "item": "corruption:lava_waders" } CorruptionLootConditionManager: package com.enderunknown.corruption.util.loot; import java.util.function.Predicate; import net.minecraft.loot.ILootSerializer; import net.minecraft.loot.LootConditionType; import net.minecraft.loot.LootTypesManager; import net.minecraft.loot.conditions.ILootCondition; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; public class CorruptionLootConditionManager { public static final LootConditionType ENTITY_SLAIN = func_237475_a_("entity_slain", new EntitySlain.Serializer()); private static LootConditionType func_237475_a_(String p_237475_0_, ILootSerializer<? extends ILootCondition> p_237475_1_) { return Registry.register(Registry.field_239704_ba_, new ResourceLocation(p_237475_0_), new LootConditionType(p_237475_1_)); } public static Object func_237474_a_() { return LootTypesManager.func_237389_a_(Registry.field_239704_ba_, "condition", "condition", ILootCondition::func_230419_b_).func_237395_a_(); } public static <T> Predicate<T> and(Predicate<T>[] p_216305_0_) { switch(p_216305_0_.length) { case 0: return (p_216304_0_) -> { return true; }; case 1: return p_216305_0_[0]; case 2: return p_216305_0_[0].and(p_216305_0_[1]); default: return (p_216307_1_) -> { for(Predicate<T> predicate : p_216305_0_) { if (!predicate.test(p_216307_1_)) { return false; } } return true; }; } } public static <T> Predicate<T> or(Predicate<T>[] p_216306_0_) { switch(p_216306_0_.length) { case 0: return (p_216308_0_) -> { return false; }; case 1: return p_216306_0_[0]; case 2: return p_216306_0_[0].or(p_216306_0_[1]); default: return (p_216309_1_) -> { for(Predicate<T> predicate : p_216306_0_) { if (predicate.test(p_216309_1_)) { return true; } } return false; }; } } } EntitySlain ILootCondition: package com.enderunknown.corruption.util.loot; import java.util.Set; import com.google.common.collect.ImmutableSet; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import com.google.gson.JsonSerializationContext; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.loot.ILootSerializer; import net.minecraft.loot.LootConditionType; import net.minecraft.loot.LootContext; import net.minecraft.loot.LootParameter; import net.minecraft.loot.LootParameters; import net.minecraft.loot.conditions.ILootCondition; import net.minecraft.util.JSONUtils; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; public class EntitySlain implements ILootCondition { private final EntityType<?> entityType; public EntitySlain(EntityType<?> entityType) { this.entityType = entityType; } public LootConditionType func_230419_b_() { return CorruptionLootConditionManager.ENTITY_SLAIN; } public Set<LootParameter<?>> getRequiredParameters() { return ImmutableSet.of(LootParameters.THIS_ENTITY); } public boolean test(LootContext context) { Entity entity = context.get(LootParameters.THIS_ENTITY); return entity != null && this.entityType.getTags() == entity.getType().getTags(); } public static class Builder implements ILootCondition.IBuilder { private final EntityType<?> entity; public Builder(EntityType<?> entityIn) { this.entity = entityIn; } public ILootCondition build() { return new EntitySlain(this.entity); } } public static class Serializer implements ILootSerializer<EntitySlain> { public void func_230424_a_(JsonObject p_230424_1_, EntitySlain p_230424_2_, JsonSerializationContext p_230424_3_) { p_230424_1_.addProperty("entity", Registry.ENTITY_TYPE.getKey(p_230424_2_.entityType).toString()); } public EntitySlain func_230423_a_(JsonObject p_230423_1_, JsonDeserializationContext p_230423_2_) { ResourceLocation resourcelocation = new ResourceLocation(JSONUtils.getString(p_230423_1_, "entity")); EntityType<?> entityT = Registry.ENTITY_TYPE.getValue(resourcelocation).orElseThrow(() -> { return new IllegalArgumentException("Can't find block " + resourcelocation); }); return new EntitySlain(entityT); } } } Thanks!
  12. Okay, I was unable to find an existing one so I made my own. When I reload data packs, I get a message that in short says corruption:entity_slain wasn't recognized. I presume that is because I didn't register it properly. I looked for a forge registry but LootConditionType didn't have a registry event so I just registered it into in the same ways the vanilla ones are. (I know one is never supposed to do that and I was going to fix it once I made sure that everything else was working as I am new to making ILootConditions) Anyway, here is my code and maybe someone can help: strider_socks.json { "type":"corruption:strider_socks", "conditions": [ { "condition":"minecraft:random_chance_with_looting", "chance":0.5, "looting_multiplier":0.2 }, { "condition": "corruption:entity_slain", "entity":"minecraft:strider" } ], "item": "corruption:lava_waders" } EntitySlain.java package com.enderunknown.corruption.util.loot; import java.util.Set; import com.google.common.collect.ImmutableSet; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import com.google.gson.JsonSerializationContext; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.loot.ILootSerializer; import net.minecraft.loot.LootConditionType; import net.minecraft.loot.LootContext; import net.minecraft.loot.LootParameter; import net.minecraft.loot.LootParameters; import net.minecraft.loot.conditions.ILootCondition; import net.minecraft.util.JSONUtils; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; public class EntitySlain implements ILootCondition { private final EntityType<?> entityType; public EntitySlain(EntityType<?> entityType) { this.entityType = entityType; } public LootConditionType func_230419_b_() { return CorruptionLootConditionManager.ENTITY_SLAIN; } public Set<LootParameter<?>> getRequiredParameters() { return ImmutableSet.of(LootParameters.THIS_ENTITY); } public boolean test(LootContext context) { Entity entity = context.get(LootParameters.THIS_ENTITY); return entity != null && this.entityType.getTags() == entity.getType().getTags(); } public static class Builder implements ILootCondition.IBuilder { private final EntityType<?> entity; public Builder(EntityType<?> entityIn) { this.entity = entityIn; } public ILootCondition build() { return new EntitySlain(this.entity); } } public static class Serializer implements ILootSerializer<EntitySlain> { public void func_230424_a_(JsonObject p_230424_1_, EntitySlain p_230424_2_, JsonSerializationContext p_230424_3_) { p_230424_1_.addProperty("entity", Registry.ENTITY_TYPE.getKey(p_230424_2_.entityType).toString()); } public EntitySlain func_230423_a_(JsonObject p_230423_1_, JsonDeserializationContext p_230423_2_) { ResourceLocation resourcelocation = new ResourceLocation(JSONUtils.getString(p_230423_1_, "entity")); EntityType<?> entityT = Registry.ENTITY_TYPE.getValue(resourcelocation).orElseThrow(() -> { return new IllegalArgumentException("Can't find block " + resourcelocation); }); return new EntitySlain(entityT); } } } CorruptionLootConditionManager.java package com.enderunknown.corruption.util.loot; import java.util.function.Predicate; import net.minecraft.loot.ILootSerializer; import net.minecraft.loot.LootConditionType; import net.minecraft.loot.LootTypesManager; import net.minecraft.loot.conditions.ILootCondition; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; public class CorruptionLootConditionManager { public static final LootConditionType ENTITY_SLAIN = register("entity_slain", new EntitySlain.Serializer()); private static LootConditionType register(String name, ILootSerializer<? extends ILootCondition> serializer) { return Registry.register(Registry.field_239704_ba_, new ResourceLocation("corruption:"+name), new LootConditionType(serializer)); } public static Object register() { return LootTypesManager.func_237389_a_(Registry.field_239704_ba_, "condition", "condition", ILootCondition::func_230419_b_).func_237395_a_(); } public static <T> Predicate<T> and(Predicate<T>[] p_216305_0_) { switch(p_216305_0_.length) { case 0: return (p_216304_0_) -> { return true; }; case 1: return p_216305_0_[0]; case 2: return p_216305_0_[0].and(p_216305_0_[1]); default: return (p_216307_1_) -> { for(Predicate<T> predicate : p_216305_0_) { if (!predicate.test(p_216307_1_)) { return false; } } return true; }; } } public static <T> Predicate<T> or(Predicate<T>[] p_216306_0_) { switch(p_216306_0_.length) { case 0: return (p_216308_0_) -> { return false; }; case 1: return p_216306_0_[0]; case 2: return p_216306_0_[0].or(p_216306_0_[1]); default: return (p_216309_1_) -> { for(Predicate<T> predicate : p_216306_0_) { if (predicate.test(p_216309_1_)) { return true; } } return false; }; } } } I did my best to keep these as similar to the vanilla classes as possible. Thanks!
  13. I was wondering how to specify the entity in a global loot modifier. I am able to set a condition, such as killed_by_player, and it works properly but my item drops regardless of the entity that I kill, whereas I only want the item to be appended to the Strider's loot table. Here is my JSON file: { "type":"corruption:strider_socks", "conditions": [ { "condition":"minecraft:random_chance_with_looting", "chance":0.5, "looting_multiplier":0.2 }, { "condition": "minecraft:entity_properties", "predicate": { "type": "minecraft:strider" }, "entity": "this" } ], "item": "corruption:lava_waders" } All that my StriderSocks LootModifier class does is add the lava waders to the generated loot. (I have followed the documentation of Global Loot Modifiers, but all of the example are for blocks.) Any help would be appreciated!
  14. I have no idea what caused this to happen. It was working and I didn't even change any of the code and it just started to crash whenever I have tried to load the game. If anyone can help that would be great! Thanks Here is the error message. The strange thing is that the piston classes are mentioned but none of my direct class (Just some of the registers.)
  15. By any chance do you (or anyone) know how to change the resourcelocation returned back into a Biome?
  16. I am wondering what the equivalent of Biome.getIdForBiome(Biome biome) is in 1.14.4. I am trying to pass a Biome, or representation of a Biome through a packet to update the client. Unfortunately, it doesn't seem like I can write a biome to the PacketBuffer. Thanks!
  17. I have a custom TileEntity with a custom TileEntityRenderer that renders a laser. The issue is the laser ceases to render when I look away from the block as shown below. Is there a way to force render the laser such as a beacon beam is rendered even if the player isn't looking at the beacon block? I have tried using methods such as isGlobalRender (returning true) and getMaxRenderDistance (returning 65536.0D) in the TileEntityRenderer and TileEntity classes respectively but neither fixed it. Thanks!
  18. Okay. Sorry for the inconvenience: It should be all sorted out here: https://github.com/EnderUnknown/Corruption1.14.4
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.