diff --git a/gradle.properties b/gradle.properties index 4b96b64..afd89b2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,15 +4,15 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.21.8 -yarn_mappings=1.21.8+build.1 +minecraft_version=1.21.9 +yarn_mappings=1.21.9+build.1 loader_version=0.17.2 loom_version=1.11-SNAPSHOT # Mod Properties -mod_version=0.1.6+1.21.8 +mod_version=0.1.6+1.21.9 maven_group=com.partatoes.littleguys archives_base_name=little-guys # Dependencies -fabric_version=0.131.0+1.21.8 +fabric_version=0.133.14+1.21.9 diff --git a/src/main/java/com/partatoes/littleguys/block/ModDispenserBehavior.java b/src/main/java/com/partatoes/littleguys/block/ModDispenserBehavior.java index 0b8f46d..09c67ae 100644 --- a/src/main/java/com/partatoes/littleguys/block/ModDispenserBehavior.java +++ b/src/main/java/com/partatoes/littleguys/block/ModDispenserBehavior.java @@ -1,6 +1,7 @@ package com.partatoes.littleguys.block; import com.partatoes.littleguys.LittleGuys; +import com.partatoes.littleguys.entity.custom.LittleGuyEntity; import com.partatoes.littleguys.item.ModItems; import com.partatoes.littleguys.item.custom.LittleGuySpawnEggItem; import net.minecraft.block.DispenserBlock; @@ -10,8 +11,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.SpawnEggItem; -import net.minecraft.registry.Registries; -import net.minecraft.registry.RegistryWrapper; import net.minecraft.util.math.BlockPointer; import net.minecraft.util.math.Direction; import net.minecraft.world.event.GameEvent; @@ -21,9 +20,20 @@ public class ModDispenserBehavior { @Override public ItemStack dispenseSilently(BlockPointer pointer, ItemStack stack) { Direction direction = pointer.state().get(DispenserBlock.FACING); - EntityType entityType = ((SpawnEggItem)stack.getItem()).getEntityType(pointer.world().getRegistryManager(), stack); + EntityType entityType = ((SpawnEggItem)stack.getItem()).getEntityType(stack); try { - entityType.spawnFromItemStack(pointer.world(), stack, null, pointer.pos().offset(direction), SpawnReason.DISPENSER, direction != Direction.UP, false); + if (entityType != null) { + var entity = entityType.spawnFromItemStack(pointer.world(), stack, null, pointer.pos().offset(direction), SpawnReason.DISPENSER, direction != Direction.UP, false); + if (entity != null) { + if (entity instanceof LittleGuyEntity littleGuyEntity) { + if (stack.getItem() instanceof LittleGuySpawnEggItem eggItem) { + littleGuyEntity.setColor(eggItem.color); + littleGuyEntity.setIsNeutral(false); + } + } + } + } + } catch (Exception exception) { LittleGuys.LOGGER.error("Error while dispensing spawn egg from dispenser at {} {}", (Object)pointer.pos(), (Object)exception); return ItemStack.EMPTY; diff --git a/src/main/java/com/partatoes/littleguys/entity/custom/LittleGuyEntity.java b/src/main/java/com/partatoes/littleguys/entity/custom/LittleGuyEntity.java index 66b5e5a..5a638d2 100644 --- a/src/main/java/com/partatoes/littleguys/entity/custom/LittleGuyEntity.java +++ b/src/main/java/com/partatoes/littleguys/entity/custom/LittleGuyEntity.java @@ -87,7 +87,7 @@ public boolean isNeutral() { return this.dataTracker.get(IS_NEUTRAL); } - private void setIsNeutral(Boolean isNeutral) { + public void setIsNeutral(Boolean isNeutral) { this.dataTracker.set(IS_NEUTRAL, isNeutral); } @@ -101,7 +101,7 @@ public void onDeath(DamageSource damageSource) { drop = ModItems.LITTLEGUY_COLORS.getOrDefault(this.getColor(), ModItems.LITTLEGUY_ITEM); } - World w = this.getWorld(); + World w = this.getEntityWorld(); if (w instanceof ServerWorld serverWorld) { this.dropItem(serverWorld, drop); } diff --git a/src/main/java/com/partatoes/littleguys/entity/goal/BoardLittleHorseGoal.java b/src/main/java/com/partatoes/littleguys/entity/goal/BoardLittleHorseGoal.java index bbb1f18..cfe3ecc 100644 --- a/src/main/java/com/partatoes/littleguys/entity/goal/BoardLittleHorseGoal.java +++ b/src/main/java/com/partatoes/littleguys/entity/goal/BoardLittleHorseGoal.java @@ -17,7 +17,7 @@ public BoardLittleHorseGoal(LittleGuyEntity entity) { @Override public boolean canStart() { - List littleHorsesList = this.mob.getWorld().getNonSpectatingEntities(LittleHorseEntity.class, this.mob.getBoundingBox().expand(5.0)); + List littleHorsesList = this.mob.getEntityWorld().getNonSpectatingEntities(LittleHorseEntity.class, this.mob.getBoundingBox().expand(5.0)); boolean ret = false; for (LittleHorseEntity horse : littleHorsesList) { Entity entity = horse.getControllingPassenger(); @@ -29,11 +29,6 @@ public boolean canStart() { return ret && !this.mob.hasVehicle(); } - @Override - public boolean canStop() { - return true; - } - @Override public void stop() { this.target = null; diff --git a/src/main/java/com/partatoes/littleguys/item/ModItems.java b/src/main/java/com/partatoes/littleguys/item/ModItems.java index 7746832..8fafa5a 100644 --- a/src/main/java/com/partatoes/littleguys/item/ModItems.java +++ b/src/main/java/com/partatoes/littleguys/item/ModItems.java @@ -2,15 +2,12 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; -import com.google.common.collect.Maps; import com.partatoes.littleguys.LittleGuys; import com.partatoes.littleguys.entity.ModEntities; -import com.partatoes.littleguys.entity.custom.LittleGuyEntity; import com.partatoes.littleguys.item.custom.LittleGuySpawnEggItem; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.DyedColorComponent; +import net.minecraft.entity.EntityType; import net.minecraft.item.Item; import net.minecraft.item.ItemGroups; import net.minecraft.item.SpawnEggItem; @@ -22,9 +19,6 @@ import net.minecraft.util.Identifier; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -33,14 +27,14 @@ public class ModItems { public static final Identifier LITTLEGUY_ITEM_ID = Identifier.of(LittleGuys.MOD_ID, "littleguy_item"); public static final Item LITTLEGUY_ITEM = registerItem( LITTLEGUY_ITEM_ID, - new SpawnEggItem(ModEntities.LITTLEGUY_ENTITY, - createItemSettings(LITTLEGUY_ITEM_ID))); + new SpawnEggItem( + createSpawnEggItemSettings(LITTLEGUY_ITEM_ID, ModEntities.LITTLEGUY_ENTITY))); public static final Identifier LITTLEHORSE_ITEM_ID = Identifier.of(LittleGuys.MOD_ID, "littlehorse_item"); public static final Item LITTLEHORSE_ITEM = registerItem( LITTLEHORSE_ITEM_ID, - new SpawnEggItem(ModEntities.LITTLEHORSE_ENTITY, - createItemSettings(LITTLEHORSE_ITEM_ID))); + new SpawnEggItem( + createSpawnEggItemSettings(LITTLEHORSE_ITEM_ID, ModEntities.LITTLEHORSE_ENTITY))); public static final Identifier SOULSAND_PILE_ID = Identifier.of(LittleGuys.MOD_ID, "soulsand_pile"); public static final Item SOULSAND_PILE_ITEM = registerItem(SOULSAND_PILE_ID, new Item(createItemSettings(SOULSAND_PILE_ID))); @@ -48,7 +42,7 @@ public class ModItems { public static final BiMap LITTLEGUY_COLORS = Stream.of(DyeColor.values()) .collect(Collectors.toMap( (color) -> color, - (color) -> registerItem(createLittleGuyColorId((DyeColor) color), new LittleGuySpawnEggItem(ModEntities.COLOR_LITTLEGUY_BIMAP.get(color), color, createItemSettings(createLittleGuyColorId(color)))), + (color) -> registerItem(createLittleGuyColorId(color), new LittleGuySpawnEggItem(color, createSpawnEggItemSettings(createLittleGuyColorId(color), ModEntities.LITTLEGUY_ENTITY))), (a, b) -> a, HashBiMap::create)); @@ -69,6 +63,10 @@ private static Item.Settings createItemSettings(Identifier id) { return new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, id)); } + private static Item.Settings createSpawnEggItemSettings(Identifier id, EntityType et) { + return new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, id)).spawnEgg(et); + } + private static void addItemsToIngredientTabItemGroup(FabricItemGroupEntries entries) { entries.add(SOULSAND_PILE_ITEM); } diff --git a/src/main/java/com/partatoes/littleguys/item/custom/LittleGuySpawnEggItem.java b/src/main/java/com/partatoes/littleguys/item/custom/LittleGuySpawnEggItem.java index a901d16..b30b05e 100644 --- a/src/main/java/com/partatoes/littleguys/item/custom/LittleGuySpawnEggItem.java +++ b/src/main/java/com/partatoes/littleguys/item/custom/LittleGuySpawnEggItem.java @@ -8,7 +8,6 @@ import net.minecraft.block.entity.Spawner; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnReason; -import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; @@ -29,9 +28,9 @@ import java.util.Objects; public class LittleGuySpawnEggItem extends SpawnEggItem { - private final DyeColor color; - public LittleGuySpawnEggItem(EntityType type, DyeColor color, Settings settings) { - super(type, settings); + public final DyeColor color; + public LittleGuySpawnEggItem(DyeColor color, Settings settings) { + super(settings); this.color = color; } @@ -49,7 +48,7 @@ public ActionResult useOnBlock(ItemUsageContext context) { BlockEntity blockEntity = world.getBlockEntity(blockPos); if (blockEntity instanceof Spawner) { Spawner spawner = (Spawner)(blockEntity); - entityType = this.getEntityType(world.getRegistryManager(),itemStack); + entityType = this.getEntityType(itemStack); spawner.setEntityType(entityType, world.getRandom()); world.updateListeners(blockPos, blockState, blockState, Block.NOTIFY_ALL); world.emitGameEvent(context.getPlayer(), GameEvent.BLOCK_CHANGE, blockPos); @@ -57,10 +56,13 @@ public ActionResult useOnBlock(ItemUsageContext context) { return ActionResult.CONSUME; } BlockPos blockPos2 = blockState.getCollisionShape(world, blockPos).isEmpty() ? blockPos : blockPos.offset(direction); - entityType = this.getEntityType(world.getRegistryManager(), itemStack); - if (entityType.spawnFromItemStack((ServerWorld)world, itemStack, context.getPlayer(), blockPos2, SpawnReason.SPAWN_ITEM_USE, true, !Objects.equals(blockPos, blockPos2) && direction == Direction.UP) != null) { + entityType = this.getEntityType(itemStack); + LittleGuyEntity entity = (LittleGuyEntity) entityType.spawnFromItemStack((ServerWorld) world, itemStack, context.getPlayer(), blockPos2, SpawnReason.SPAWN_ITEM_USE, true, !Objects.equals(blockPos, blockPos2) && direction == Direction.UP); + if (entity != null) { itemStack.decrement(1); world.emitGameEvent(context.getPlayer(), GameEvent.ENTITY_PLACE, blockPos); + entity.setColor(this.color); + entity.setIsNeutral(false); } return ActionResult.CONSUME; } @@ -82,7 +84,7 @@ public ActionResult use(World world, PlayerEntity user, Hand hand) { if (world.canEntityModifyAt(user, blockPos) && user.canPlaceOn(blockPos, blockHitResult.getSide(), itemStack)) { return ActionResult.FAIL; } - EntityType entityType = this.getEntityType(world.getRegistryManager(), itemStack); + EntityType entityType = this.getEntityType(itemStack); LittleGuyEntity entity = (LittleGuyEntity) entityType.spawnFromItemStack((ServerWorld)world, itemStack, user, blockPos, SpawnReason.SPAWN_ITEM_USE, false, false); if (entity == null) { @@ -92,7 +94,7 @@ public ActionResult use(World world, PlayerEntity user, Hand hand) { } itemStack.decrementUnlessCreative(1, user); user.incrementStat(Stats.USED.getOrCreateStat(this)); - world.emitGameEvent(user, GameEvent.ENTITY_PLACE, (entity).getPos()); + world.emitGameEvent(user, GameEvent.ENTITY_PLACE, (entity).getEntityPos()); return ActionResult.CONSUME; } }