From a5c7a5e3a6512dc3f418f7cf0b439eb1ef3b9cf9 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 7 Nov 2023 18:20:41 +0000 Subject: [PATCH] Added some farming bonuses for Earth Ponies --- .../ability/EarthPonyGrowAbility.java | 23 ++- .../unicopia/block/ThornBlock.java | 151 ++++++++++++++++++ .../unicopia/block/ThornBudBlock.java | 116 ++++++++++++++ .../unicopia/block/UBlocks.java | 5 +- .../unicopia/client/URenderers.java | 1 + .../render/entity/LootBugEntityRenderer.java | 28 ++++ .../unicopia/entity/mob/LootBugEntity.java | 22 +++ .../unicopia/entity/mob/UEntities.java | 6 +- .../minelittlepony/unicopia/item/UItems.java | 3 +- .../unicopia/blockstates/plunder_vine.json | 128 +++++++++++++++ .../blockstates/plunder_vine_bud.json | 10 ++ .../models/block/plunder_vine_branch.json | 75 +++++++++ .../models/block/plunder_vine_branch_2.json | 75 +++++++++ .../models/block/plunder_vine_branch_3.json | 75 +++++++++ .../models/block/plunder_vine_branch_4.json | 75 +++++++++ .../models/block/plunder_vine_bud.json | 145 +++++++++++++++++ .../models/item/loot_bug_spawn_egg.json | 3 + .../unicopia/textures/block/plunder_leaf.png | Bin 0 -> 7251 bytes .../unicopia/textures/block/plunder_vine.png | Bin 0 -> 222 bytes .../entity/bed/sheets/original_cyan.png | Bin 0 -> 5842 bytes .../entity/bed/sheets/original_pink.png | Bin 0 -> 5948 bytes .../entity/bed/sheets/original_purple.png | Bin 0 -> 6253 bytes .../entity/bed/sheets/original_yellow.png | Bin 0 -> 5525 bytes .../unicopia/textures/entity/loot_bug.png | Bin 0 -> 5610 bytes .../loot_tables/blocks/plunder_vine.json | 42 +++++ .../loot_tables/entities/loot_bug.json | 87 ++++++++++ .../tags/items/loot_bug_high_value_drops.json | 28 ++++ 27 files changed, 1093 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/block/ThornBlock.java create mode 100644 src/main/java/com/minelittlepony/unicopia/block/ThornBudBlock.java create mode 100644 src/main/java/com/minelittlepony/unicopia/client/render/entity/LootBugEntityRenderer.java create mode 100644 src/main/java/com/minelittlepony/unicopia/entity/mob/LootBugEntity.java create mode 100644 src/main/resources/assets/unicopia/blockstates/plunder_vine.json create mode 100644 src/main/resources/assets/unicopia/blockstates/plunder_vine_bud.json create mode 100644 src/main/resources/assets/unicopia/models/block/plunder_vine_branch.json create mode 100644 src/main/resources/assets/unicopia/models/block/plunder_vine_branch_2.json create mode 100644 src/main/resources/assets/unicopia/models/block/plunder_vine_branch_3.json create mode 100644 src/main/resources/assets/unicopia/models/block/plunder_vine_branch_4.json create mode 100644 src/main/resources/assets/unicopia/models/block/plunder_vine_bud.json create mode 100644 src/main/resources/assets/unicopia/models/item/loot_bug_spawn_egg.json create mode 100644 src/main/resources/assets/unicopia/textures/block/plunder_leaf.png create mode 100644 src/main/resources/assets/unicopia/textures/block/plunder_vine.png create mode 100644 src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_cyan.png create mode 100644 src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_pink.png create mode 100644 src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_purple.png create mode 100644 src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_yellow.png create mode 100644 src/main/resources/assets/unicopia/textures/entity/loot_bug.png create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/plunder_vine.json create mode 100644 src/main/resources/data/unicopia/loot_tables/entities/loot_bug.json create mode 100644 src/main/resources/data/unicopia/tags/items/loot_bug_high_value_drops.json diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java index ef901a39..ee82de7d 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java @@ -5,10 +5,12 @@ import java.util.Optional; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; import com.minelittlepony.unicopia.ability.data.Pos; +import com.minelittlepony.unicopia.block.UBlocks; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.util.TraceHelper; import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.item.BoneMealItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -71,8 +73,21 @@ public class EarthPonyGrowAbility implements Ability { ItemStack stack = new ItemStack(Items.BONE_MEAL); - if (BoneMealItem.useOnFertilizable(stack, w, pos) - || BoneMealItem.useOnGround(stack, w, pos, Direction.UP)) { + if (state.getBlock() instanceof Growable growable) { + return growable.grow(w, state, pos) ? 1 : 0; + } + + if (BoneMealItem.useOnFertilizable(stack, w, pos)) { + if (w.random.nextInt(350) == 0) { + if (w.getBlockState(pos.down()).isOf(Blocks.FARMLAND)) { + w.setBlockState(pos.down(), Blocks.DIRT.getDefaultState()); + } + w.setBlockState(pos, UBlocks.PLUNDER_VINE_BUD.getDefaultState()); + } + return 1; + } + + if (BoneMealItem.useOnGround(stack, w, pos, Direction.UP)) { return 1; } @@ -92,4 +107,8 @@ public class EarthPonyGrowAbility implements Ability { public void coolDown(Pony player, AbilitySlot slot) { } + + public interface Growable { + boolean grow(World world, BlockState state, BlockPos pos); + } } diff --git a/src/main/java/com/minelittlepony/unicopia/block/ThornBlock.java b/src/main/java/com/minelittlepony/unicopia/block/ThornBlock.java new file mode 100644 index 00000000..a3b6fc32 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/block/ThornBlock.java @@ -0,0 +1,151 @@ +package com.minelittlepony.unicopia.block; + +import java.util.Collection; +import java.util.function.Supplier; +import com.minelittlepony.unicopia.ability.EarthPonyGrowAbility; +import com.minelittlepony.unicopia.entity.mob.UEntities; +import com.minelittlepony.unicopia.util.VecHelper; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.ConnectingBlock; +import net.minecraft.block.Fertilizable; +import net.minecraft.entity.SpawnReason; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.registry.tag.BlockTags; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.state.property.IntProperty; +import net.minecraft.state.property.Properties; +import net.minecraft.state.property.Property; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; +import net.minecraft.world.WorldView; + +public class ThornBlock extends ConnectingBlock implements EarthPonyGrowAbility.Growable, Fertilizable { + static final Collection PROPERTIES = FACING_PROPERTIES.values(); + static final DirectionProperty FACING = Properties.FACING; + static final int MAX_DISTANCE = 25; + static final int MAX_AGE = 4; + static final IntProperty DISTANCE = IntProperty.of("distance", 0, MAX_DISTANCE); + static final IntProperty AGE = IntProperty.of("age", 0, MAX_AGE); + + private final Supplier bud; + + public ThornBlock(Settings settings, Supplier bud) { + super(0.125F, settings); + this.bud = bud; + PROPERTIES.forEach(property -> setDefaultState(getDefaultState().with(property, false))); + setDefaultState(getDefaultState() + .with(FACING, Direction.DOWN) + .with(DISTANCE, 0) + .with(AGE, 0) + .with(DOWN, true) + ); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(PROPERTIES.toArray(Property[]::new)); + builder.add(FACING, DISTANCE, AGE); + } + + @Override + @Deprecated + public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + if (state.get(AGE) == MAX_AGE + && random.nextInt(1200) == 0 + && world.isPlayerInRange(pos.getX(), pos.getY(), pos.getZ(), 3)) { + UEntities.LOOT_BUG.spawn(world, pos, SpawnReason.NATURAL); + } + } + + @Override + public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + if (!state.canPlaceAt(world, pos)) { + world.breakBlock(pos, true); + } + } + + @Override + public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { + if (state.get(AGE) == MAX_AGE && world.isPlayerInRange(pos.getX(), pos.getY(), pos.getZ(), 3)) { + Vec3d particlePos = pos.toCenterPos().add(VecHelper.supply(() -> random.nextTriangular(0, 0.5))); + world.addImportantParticle(ParticleTypes.ASH, particlePos.x, particlePos.y, particlePos.z, 0, 0, 0); + } + } + + @Override + public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + if (direction == state.get(FACING) && !state.canPlaceAt(world, pos)) { + world.scheduleBlockTick(pos, this, 1); + } + return state; + } + + @Override + public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { + Direction facing = state.get(FACING); + BlockState neighborState = world.getBlockState(pos.offset(facing)); + return (facing == Direction.DOWN && state.get(DISTANCE) == 0 && neighborState.isIn(BlockTags.DIRT)) + || neighborState.isOf(this) + || neighborState.isOf(bud.get()); + } + + @Override + public boolean grow(World world, BlockState state, BlockPos pos) { + if (state.get(DISTANCE) >= MAX_DISTANCE) { + return false; + } + + world.setBlockState(pos, state.with(AGE, Math.min(state.get(AGE) + 1, MAX_AGE))); + return FACING_PROPERTIES.keySet().stream() + .filter(direction -> isConnected(state, world.getBlockState(pos.offset(direction)), direction)) + .map(direction -> { + BlockPos p = pos.offset(direction); + BlockState s = world.getBlockState(p); + if (s.isAir()) { + // sprout a new branch for cut off nodes + world.setBlockState(p, bud.get().getDefaultState() + .with(FACING, direction.getOpposite()) + .with(DISTANCE, state.get(DISTANCE) + 1) + ); + return true; + } + return ((EarthPonyGrowAbility.Growable)s.getBlock()).grow(world, s, p); + }).reduce(false, Boolean::logicalOr); + } + + @Override + public boolean isFertilizable(WorldView world, BlockPos pos, BlockState state, boolean client) { + return true; + } + + @Override + public boolean canGrow(World world, Random random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { + grow(world, state, pos); + } + + private boolean isConnected(BlockState state, BlockState neighborState, Direction direction) { + if (!state.get(FACING_PROPERTIES.get(direction))) { + return false; + } + if (neighborState.isAir()) { + return true; + } + return neighborState.getBlock() instanceof EarthPonyGrowAbility.Growable + && (neighborState.isOf(this) || neighborState.isOf(bud.get())) + && neighborState.get(FACING) == direction.getOpposite(); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/block/ThornBudBlock.java b/src/main/java/com/minelittlepony/unicopia/block/ThornBudBlock.java new file mode 100644 index 00000000..1d99f0d1 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/block/ThornBudBlock.java @@ -0,0 +1,116 @@ +package com.minelittlepony.unicopia.block; + +import java.util.Optional; +import java.util.stream.Stream; + +import com.minelittlepony.unicopia.USounds; +import com.minelittlepony.unicopia.ability.EarthPonyGrowAbility; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.Fertilizable; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.sound.SoundCategory; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.state.property.IntProperty; +import net.minecraft.state.property.Properties; +import net.minecraft.util.Util; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; +import net.minecraft.world.WorldView; + +public class ThornBudBlock extends Block implements EarthPonyGrowAbility.Growable, Fertilizable { + static final DirectionProperty FACING = Properties.FACING; + static final int MAX_DISTANCE = 25; + static final IntProperty DISTANCE = IntProperty.of("distance", 0, MAX_DISTANCE); + + private final BlockState branchState; + + public ThornBudBlock(Settings settings, BlockState branchState) { + super(settings); + setDefaultState(getDefaultState().with(FACING, Direction.DOWN).with(DISTANCE, 0)); + this.branchState = branchState; + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(FACING, DISTANCE); + } + + @Override + public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + if (random.nextInt(50) == 0) { + grow(world, state, pos); + } + } + + @Override + public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + if (direction == state.get(FACING) && !(neighborState.isOf(this) || neighborState.isOf(branchState.getBlock()))) { + return Blocks.AIR.getDefaultState(); + } + return state; + } + + @Override + public boolean grow(World world, BlockState state, BlockPos pos) { + if (state.get(DISTANCE) >= MAX_DISTANCE) { + return false; + } + return pickGrowthDirection(world, state, pos).map(randomDirection -> { + BlockPos p = pos.offset(randomDirection); + + if (!canReplace(world.getBlockState(p))) { + return false; + } + + world.playSound(null, pos, USounds.Vanilla.ITEM_BONE_MEAL_USE, SoundCategory.BLOCKS); + world.setBlockState(pos, branchState + .with(FACING, state.get(FACING)) + .with(ThornBlock.FACING_PROPERTIES.get(state.get(FACING)), true) + .with(ThornBlock.FACING_PROPERTIES.get(randomDirection), true)); + world.setBlockState(p, getDefaultState() + .with(FACING, randomDirection.getOpposite()) + .with(DISTANCE, state.get(DISTANCE) + 1) + ); + return true; + }).orElse(false); + } + + protected boolean canReplace(BlockState state) { + return state.isReplaceable(); + } + + private static Optional pickGrowthDirection(World world, BlockState state, BlockPos pos) { + Direction excluded = state.get(FACING); + return Util.getRandomOrEmpty(ThornBlock.FACING_PROPERTIES.keySet().stream() + .filter(direction -> direction != excluded) + .flatMap(direction -> getByWeight(direction, excluded)) + .toList(), world.getRandom()); + } + + private static Stream getByWeight(Direction input, Direction excluded) { + return Stream.generate(() -> input) + .limit(input.getAxis() == excluded.getAxis() ? 6L : input.getAxis() == Direction.Axis.Y ? 1L : 3L); + } + + @Override + public boolean isFertilizable(WorldView world, BlockPos pos, BlockState state, boolean client) { + return true; + } + + @Override + public boolean canGrow(World world, Random random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { + grow(world, state, pos); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java index ff33019b..75f82d8e 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java @@ -133,6 +133,9 @@ public interface UBlocks { SegmentedCropBlock OATS_STEM = register("oats_stem", OATS.createNext(5)); SegmentedCropBlock OATS_CROWN = register("oats_crown", OATS_STEM.createNext(5)); + Block PLUNDER_VINE = register("plunder_vine", new ThornBlock(Settings.create().mapColor(MapColor.DARK_CRIMSON).hardness(1).ticksRandomly().sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.DESTROY), () -> UBlocks.PLUNDER_VINE_BUD)); + Block PLUNDER_VINE_BUD = register("plunder_vine_bud", new ThornBudBlock(Settings.create().mapColor(MapColor.DARK_CRIMSON).hardness(1).nonOpaque().ticksRandomly().sounds(BlockSoundGroup.GRASS).pistonBehavior(PistonBehavior.DESTROY), PLUNDER_VINE.getDefaultState())); + Block CHITIN = register("chitin", new SnowyBlock(Settings.create().mapColor(MapColor.PALE_PURPLE).hardness(5).requiresTool().ticksRandomly().sounds(BlockSoundGroup.CORAL)), ItemGroups.NATURAL); Block SURFACE_CHITIN = register("surface_chitin", new GrowableBlock(Settings.copy(CHITIN), () -> CHITIN), ItemGroups.NATURAL); Block CHISELLED_CHITIN = register("chiselled_chitin", new Block(Settings.create().mapColor(MapColor.PALE_PURPLE).hardness(5).requiresTool()), ItemGroups.BUILDING_BLOCKS); @@ -218,7 +221,7 @@ public interface UBlocks { StrippableBlockRegistry.register(PALM_LOG, STRIPPED_PALM_LOG); StrippableBlockRegistry.register(ZAP_WOOD, STRIPPED_ZAP_WOOD); StrippableBlockRegistry.register(PALM_WOOD, STRIPPED_PALM_WOOD); - Collections.addAll(TRANSLUCENT_BLOCKS, WEATHER_VANE, CHITIN_SPIKES); + Collections.addAll(TRANSLUCENT_BLOCKS, WEATHER_VANE, CHITIN_SPIKES, PLUNDER_VINE, PLUNDER_VINE_BUD); TintedBlock.REGISTRY.add(PALM_LEAVES); FlammableBlockRegistry.getDefaultInstance().add(GREEN_APPLE_LEAVES, 30, 60); diff --git a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java index f0c03424..b0e3a716 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java +++ b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java @@ -92,6 +92,7 @@ public interface URenderers { EntityRendererRegistry.register(UEntities.STORM_CLOUD, StormCloudEntityRenderer::new); EntityRendererRegistry.register(UEntities.AIR_BALLOON, AirBalloonEntityRenderer::new); EntityRendererRegistry.register(UEntities.FRIENDLY_CREEPER, FriendlyCreeperEntityRenderer::new); + EntityRendererRegistry.register(UEntities.LOOT_BUG, LootBugEntityRenderer::new); BlockEntityRendererFactories.register(UBlockEntities.WEATHER_VANE, WeatherVaneBlockEntityRenderer::new); BlockEntityRendererFactories.register(UBlockEntities.FANCY_BED, CloudBedBlockEntityRenderer::new); diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/entity/LootBugEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/entity/LootBugEntityRenderer.java new file mode 100644 index 00000000..b8ffe426 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/client/render/entity/LootBugEntityRenderer.java @@ -0,0 +1,28 @@ +package com.minelittlepony.unicopia.client.render.entity; + +import com.minelittlepony.unicopia.Unicopia; + +import net.minecraft.client.render.entity.EntityRendererFactory.Context; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.mob.SilverfishEntity; +import net.minecraft.util.Identifier; +import net.minecraft.client.render.entity.SilverfishEntityRenderer; + +public class LootBugEntityRenderer extends SilverfishEntityRenderer { + private static final Identifier TEXTURE = Unicopia.id("textures/entity/loot_bug.png"); + + public LootBugEntityRenderer(Context context) { + super(context); + } + + @Override + public Identifier getTexture(SilverfishEntity entity) { + return TEXTURE; + } + + @Override + protected void scale(SilverfishEntity entity, MatrixStack matrices, float tickDelta) { + float scale = 2; + matrices.scale(scale, scale, scale); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/entity/mob/LootBugEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/mob/LootBugEntity.java new file mode 100644 index 00000000..1c475e3d --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/entity/mob/LootBugEntity.java @@ -0,0 +1,22 @@ +package com.minelittlepony.unicopia.entity.mob; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.mob.SilverfishEntity; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.world.World; + +public class LootBugEntity extends SilverfishEntity { + public LootBugEntity(EntityType entityType, World world) { + super(entityType, world); + } + + @Override + public void tick() { + super.tick(); + + getWorld().addParticle(ParticleTypes.ELECTRIC_SPARK, + getParticleX(1), this.getEyeY(), getParticleZ(1), + random.nextFloat() - 0.5F, random.nextFloat(), random.nextFloat() - 0.5F + ); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/entity/mob/UEntities.java b/src/main/java/com/minelittlepony/unicopia/entity/mob/UEntities.java index d369e99c..3e4b122b 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/mob/UEntities.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/mob/UEntities.java @@ -46,7 +46,7 @@ public interface UEntities { .trackRangeBlocks(200) .dimensions(EntityDimensions.fixed(0.1F, 0.1F))); EntityType FRIENDLY_CREEPER = register("friendly_creeper", FabricEntityTypeBuilder.create(SpawnGroup.MISC, FriendlyCreeperEntity::new) - .trackRangeBlocks(8) + .trackRangeChunks(8) .dimensions(EntityDimensions.fixed(0.6f, 1.7f)) ); EntityType SPELLBOOK = register("spellbook", FabricEntityTypeBuilder.create(SpawnGroup.MISC, SpellbookEntity::new) @@ -64,6 +64,9 @@ public interface UEntities { EntityType AIR_BALLOON = register("air_balloon", FabricEntityTypeBuilder.create(SpawnGroup.MISC, AirBalloonEntity::new) .trackRangeBlocks(1000) .dimensions(EntityDimensions.changing(2.5F, 0.1F))); + EntityType LOOT_BUG = register("loot_bug", FabricEntityTypeBuilder.create(SpawnGroup.MONSTER, LootBugEntity::new) + .trackRangeChunks(8) + .dimensions(EntityDimensions.fixed(0.8F, 0.6F))); static EntityType register(String name, FabricEntityTypeBuilder builder) { EntityType type = builder.build(); @@ -77,6 +80,7 @@ public interface UEntities { FabricDefaultAttributeRegistry.register(AIR_BALLOON, FlyingEntity.createMobAttributes()); FabricDefaultAttributeRegistry.register(SOMBRA, SombraEntity.createMobAttributes()); FabricDefaultAttributeRegistry.register(FRIENDLY_CREEPER, FriendlyCreeperEntity.createCreeperAttributes()); + FabricDefaultAttributeRegistry.register(LOOT_BUG, LootBugEntity.createSilverfishAttributes()); if (!Unicopia.getConfig().disableButterflySpawning.get()) { final Predicate butterflySpawnable = BiomeSelectors.foundInOverworld() diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/item/UItems.java index 9d52bd7a..011bff35 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItems.java @@ -141,7 +141,8 @@ public interface UItems { Item DIAMOND_POLEARM = register("diamond_polearm", new PolearmItem(ToolMaterials.DIAMOND, 2, -3.6F, 5, new Item.Settings()), ItemGroups.COMBAT); Item NETHERITE_POLEARM = register("netherite_polearm", new PolearmItem(ToolMaterials.NETHERITE, 2, -3.6F, 5, new Item.Settings().fireproof()), ItemGroups.COMBAT); - Item BUTTERFLY_SPAWN_EGG = register("butterfly_spawn_egg", new SpawnEggItem(UEntities.BUTTERFLY, 0x222200, 0xaaeeff, new Item.Settings()), ItemGroups.SPAWN_EGGS); + Item LOOT_BUG_SPAWN_EGG = register("loot_bug_spawn_egg", new SpawnEggItem(UEntities.LOOT_BUG, 0x3C9D14, 0xE66F16, new Item.Settings()), ItemGroups.SPAWN_EGGS); + Item BUTTERFLY_SPAWN_EGG = register("butterfly_spawn_egg", new SpawnEggItem(UEntities.BUTTERFLY, 0x222200, 0xAAEEFF, new Item.Settings()), ItemGroups.SPAWN_EGGS); Item BUTTERFLY = register("butterfly", new Item(new Item.Settings().food(UFoodComponents.INSECTS)), ItemGroups.FOOD_AND_DRINK); Item PALM_BOAT = ItemGroupRegistry.register(TerraformBoatItemHelper.registerBoatItem(Unicopia.id("palm_boat"), UWoodTypes.PALM_BOAT_TYPE, false), ItemGroups.FUNCTIONAL); diff --git a/src/main/resources/assets/unicopia/blockstates/plunder_vine.json b/src/main/resources/assets/unicopia/blockstates/plunder_vine.json new file mode 100644 index 00000000..87b7ee61 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/plunder_vine.json @@ -0,0 +1,128 @@ +{ + "multipart": [ + { + "apply": { "model": "unicopia:block/plunder_vine_branch" }, + "when": { "age": 0, "down": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch", "x": 180 }, + "when": { "age": 0, "up": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch", "x": 90 }, + "when": { "age": 0, "south": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch", "x": 90, "y": 90 }, + "when": { "age": 0, "west": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch", "x": 90, "y": 180 }, + "when": { "age": 0, "north": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch", "x": 90, "y": 270 }, + "when": { "age": 0, "east": true } + }, + + { + "apply": { "model": "unicopia:block/plunder_vine_branch_2" }, + "when": { "age": 1, "down": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_2", "x": 180 }, + "when": { "age": 1, "up": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_2", "x": 90 }, + "when": { "age": 1, "south": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_2", "x": 90, "y": 90 }, + "when": { "age": 1, "west": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_2", "x": 90, "y": 180 }, + "when": { "age": 1, "north": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_2", "x": 90, "y": 270 }, + "when": { "age": 1, "east": true } + }, + + { + "apply": { "model": "unicopia:block/plunder_vine_branch_3" }, + "when": { "age": 2, "down": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_3", "x": 180 }, + "when": { "age": 2, "up": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_3", "x": 90 }, + "when": { "age": 2, "south": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_3", "x": 90, "y": 90 }, + "when": { "age": 2, "west": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_3", "x": 90, "y": 180 }, + "when": { "age": 2, "north": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_3", "x": 90, "y": 270 }, + "when": { "age": 2, "east": true } + }, + + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4" }, + "when": { "age": 3, "down": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 180 }, + "when": { "age": 3, "up": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90 }, + "when": { "age": 3, "south": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 90 }, + "when": { "age": 3, "west": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 180 }, + "when": { "age": 3, "north": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 270 }, + "when": { "age": 3, "east": true } + }, + + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4" }, + "when": { "age": 4, "down": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 180 }, + "when": { "age": 4, "up": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90 }, + "when": { "age": 4, "south": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 90 }, + "when": { "age": 4, "west": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 180 }, + "when": { "age": 4, "north": true } + }, + { + "apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 270 }, + "when": { "age": 4, "east": true } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/plunder_vine_bud.json b/src/main/resources/assets/unicopia/blockstates/plunder_vine_bud.json new file mode 100644 index 00000000..bf21be63 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/plunder_vine_bud.json @@ -0,0 +1,10 @@ +{ + "variants": { + "facing=down": { "model": "unicopia:block/plunder_vine_bud" }, + "facing=up": { "model": "unicopia:block/plunder_vine_bud", "x": 180 }, + "facing=south": { "model": "unicopia:block/plunder_vine_bud", "x": 90 }, + "facing=west": { "model": "unicopia:block/plunder_vine_bud", "x": 90, "y": 90 }, + "facing=north": { "model": "unicopia:block/plunder_vine_bud", "x": 90, "y": 180 }, + "facing=east": { "model": "unicopia:block/plunder_vine_bud", "x": 90, "y": 270 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/plunder_vine_branch.json b/src/main/resources/assets/unicopia/models/block/plunder_vine_branch.json new file mode 100644 index 00000000..0c51be21 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/plunder_vine_branch.json @@ -0,0 +1,75 @@ +{ + "textures": { + "particle": "unicopia:block/plunder_vine", + "stem": "unicopia:block/plunder_vine", + "leaf": "unicopia:block/plunder_leaf" + }, + "elements": [ + { + "from": [7.3, 0, 7.3], + "to": [8.7, 9, 8.7], + "faces": { + "north": {"uv": [0, 2, 2, 11], "texture": "#stem"}, + "east": {"uv": [0, 2, 2, 11], "texture": "#stem"}, + "south": {"uv": [0, 2, 2, 11], "texture": "#stem"}, + "west": {"uv": [0, 2, 2, 11], "texture": "#stem"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#stem"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#stem"} + } + }, + { + "from": [4, 0, 8], + "to": [12, 8, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [4, 5, 8], + "to": [12, 13, 8], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [6, 3.95, 8.1], + "to": [7, 4.95, 8.1], + "rotation": {"angle": -45, "axis": "z", "origin": [7, 4, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "south": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [6, 6.95, 8.1], + "to": [7, 7.95, 8.1], + "rotation": {"angle": -45, "axis": "z", "origin": [7, 4, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "south": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [8, 2.35, 10.1], + "to": [8, 3.35, 11.1], + "rotation": {"angle": 45, "axis": "x", "origin": [7, 4, 8]}, + "faces": { + "east": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "west": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [8, 5.35, 4.1], + "to": [8, 6.35, 5.1], + "rotation": {"angle": 45, "axis": "x", "origin": [7, 4, 8]}, + "faces": { + "east": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "west": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/plunder_vine_branch_2.json b/src/main/resources/assets/unicopia/models/block/plunder_vine_branch_2.json new file mode 100644 index 00000000..ce94fc6c --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/plunder_vine_branch_2.json @@ -0,0 +1,75 @@ +{ + "textures": { + "particle": "unicopia:block/plunder_vine", + "stem": "unicopia:block/plunder_vine", + "leaf": "unicopia:block/plunder_leaf" + }, + "elements": [ + { + "from": [7, 0, 7], + "to": [9, 9, 9], + "faces": { + "north": {"uv": [0, 2, 2, 11], "texture": "#stem"}, + "east": {"uv": [0, 2, 2, 11], "texture": "#stem"}, + "south": {"uv": [0, 2, 2, 11], "texture": "#stem"}, + "west": {"uv": [0, 2, 2, 11], "texture": "#stem"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#stem"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#stem"} + } + }, + { + "from": [4, 0, 8], + "to": [12, 8, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [4, 5, 8], + "to": [12, 13, 8], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [6, 3.95, 8.1], + "to": [7, 4.95, 8.1], + "rotation": {"angle": -45, "axis": "z", "origin": [7, 4, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "south": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [6, 6.95, 8.1], + "to": [7, 7.95, 8.1], + "rotation": {"angle": -45, "axis": "z", "origin": [7, 4, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "south": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [8, 2.35, 10.1], + "to": [8, 3.35, 11.1], + "rotation": {"angle": 45, "axis": "x", "origin": [7, 4, 8]}, + "faces": { + "east": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "west": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [8, 5.35, 4.1], + "to": [8, 6.35, 5.1], + "rotation": {"angle": 45, "axis": "x", "origin": [7, 4, 8]}, + "faces": { + "east": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "west": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/plunder_vine_branch_3.json b/src/main/resources/assets/unicopia/models/block/plunder_vine_branch_3.json new file mode 100644 index 00000000..4aae794e --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/plunder_vine_branch_3.json @@ -0,0 +1,75 @@ +{ + "textures": { + "particle": "unicopia:block/plunder_vine", + "stem": "unicopia:block/plunder_vine", + "leaf": "unicopia:block/plunder_leaf" + }, + "elements": [ + { + "from": [6.5, 0, 6.5], + "to": [9.5, 9, 9.5], + "faces": { + "north": {"uv": [0, 2, 4, 11], "texture": "#stem"}, + "east": {"uv": [0, 2, 4, 11], "texture": "#stem"}, + "south": {"uv": [0, 2, 4, 11], "texture": "#stem"}, + "west": {"uv": [0, 2, 4, 11], "texture": "#stem"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#stem"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#stem"} + } + }, + { + "from": [3, 0, 8], + "to": [13, 8, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [3, 5, 8], + "to": [13, 13, 8], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [5.6, 3.95, 8.1], + "to": [6.6, 4.95, 8.1], + "rotation": {"angle": -45, "axis": "z", "origin": [6.6, 4, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "south": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [6.4, 6.95, 8.1], + "to": [7.4, 7.95, 8.1], + "rotation": {"angle": -45, "axis": "z", "origin": [7.4, 4, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "south": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [8, 2.35, 10.6], + "to": [8, 3.35, 11.6], + "rotation": {"angle": 45, "axis": "x", "origin": [7, 4, 8.5]}, + "faces": { + "east": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "west": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [8, 5.35, 3.8], + "to": [8, 6.35, 4.8], + "rotation": {"angle": 45, "axis": "x", "origin": [7, 4, 7.7]}, + "faces": { + "east": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "west": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/plunder_vine_branch_4.json b/src/main/resources/assets/unicopia/models/block/plunder_vine_branch_4.json new file mode 100644 index 00000000..d8d8c7d1 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/plunder_vine_branch_4.json @@ -0,0 +1,75 @@ +{ + "textures": { + "particle": "unicopia:block/plunder_vine", + "stem": "unicopia:block/plunder_vine", + "leaf": "unicopia:block/plunder_leaf" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 9, 10], + "faces": { + "north": {"uv": [0, 2, 4, 11], "texture": "#stem"}, + "east": {"uv": [0, 2, 4, 11], "texture": "#stem"}, + "south": {"uv": [0, 2, 4, 11], "texture": "#stem"}, + "west": {"uv": [0, 2, 4, 11], "texture": "#stem"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#stem"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#stem"} + } + }, + { + "from": [3, 0, 8], + "to": [13, 8, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [3, 5, 8], + "to": [13, 13, 8], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [4.8, 3.95, 8.1], + "to": [5.8, 4.95, 8.1], + "rotation": {"angle": -45, "axis": "z", "origin": [5.8, 4, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "south": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [7.8, 6.95, 8.1], + "to": [8.8, 7.95, 8.1], + "rotation": {"angle": -45, "axis": "z", "origin": [8.8, 4, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "south": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [8, 2.35, 11.4], + "to": [8, 3.35, 12.4], + "rotation": {"angle": 45, "axis": "x", "origin": [7, 4, 9.3]}, + "faces": { + "east": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "west": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [8, 5.35, 2.9], + "to": [8, 6.35, 3.9], + "rotation": {"angle": 45, "axis": "x", "origin": [7, 4, 6.8]}, + "faces": { + "east": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "west": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/plunder_vine_bud.json b/src/main/resources/assets/unicopia/models/block/plunder_vine_bud.json new file mode 100644 index 00000000..9721c814 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/plunder_vine_bud.json @@ -0,0 +1,145 @@ +{ + "textures": { + "particle": "unicopia:block/plunder_vine", + "stem": "unicopia:block/plunder_vine", + "leaf": "unicopia:block/plunder_leaf" + }, + "elements": [ + { + "from": [7.3, 0, 7.3], + "to": [8.7, 5, 8.7], + "faces": { + "north": {"uv": [0, 6, 2, 11], "texture": "#stem"}, + "east": {"uv": [0, 6, 2, 11], "texture": "#stem"}, + "south": {"uv": [0, 6, 2, 11], "texture": "#stem"}, + "west": {"uv": [0, 6, 2, 11], "texture": "#stem"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#stem"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#stem"} + } + }, + { + "from": [7.3, 5, 7.3], + "to": [8.7, 13, 8.7], + "rotation": {"angle": 22.5, "axis": "z", "origin": [8, 5.5, 8]}, + "faces": { + "north": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "east": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "south": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "west": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#stem"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#stem"} + } + }, + { + "from": [7.3, 5, 7.3], + "to": [8.7, 13, 8.7], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 5.5, 8]}, + "faces": { + "north": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "east": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "south": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "west": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#stem"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#stem"} + } + }, + { + "from": [7.3, 5, 7.3], + "to": [8.7, 13, 8.7], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 5.5, 8]}, + "faces": { + "north": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "east": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "south": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "west": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#stem"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#stem"} + } + }, + { + "from": [7.3, 5, 7.3], + "to": [8.7, 13, 8.7], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 5.5, 8]}, + "faces": { + "north": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "east": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "south": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "west": {"uv": [0, 3, 2, 11], "texture": "#stem"}, + "up": {"uv": [2, 2, 0, 0], "texture": "#stem"}, + "down": {"uv": [2, 0, 0, 2], "texture": "#stem"} + } + }, + { + "from": [0, 5, 8], + "to": [16, 19, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [8, -0.7, 2], + "to": [8, 10.3, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [0, 3, 8], + "to": [16, 19, 8], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [2.3, -0.8, 8], + "to": [14.3, 13.2, 8], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#leaf"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#leaf"} + } + }, + { + "from": [6, 3.95, 8.1], + "to": [7, 4.95, 8.1], + "rotation": {"angle": -45, "axis": "z", "origin": [7, 4, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "south": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [6, 6.95, 8.1], + "to": [7, 7.95, 8.1], + "rotation": {"angle": -45, "axis": "z", "origin": [7, 4, 8]}, + "faces": { + "north": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "south": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [8, 2.35, 10.1], + "to": [8, 3.35, 11.1], + "rotation": {"angle": 45, "axis": "x", "origin": [7, 4, 8]}, + "faces": { + "east": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "west": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + }, + { + "from": [8, 5.35, 4.1], + "to": [8, 6.35, 5.1], + "rotation": {"angle": 45, "axis": "x", "origin": [7, 4, 8]}, + "faces": { + "east": {"uv": [2, 0, 3, 1], "texture": "#stem"}, + "west": {"uv": [2, 0, 3, 1], "texture": "#stem"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/item/loot_bug_spawn_egg.json b/src/main/resources/assets/unicopia/models/item/loot_bug_spawn_egg.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/loot_bug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/textures/block/plunder_leaf.png b/src/main/resources/assets/unicopia/textures/block/plunder_leaf.png new file mode 100644 index 0000000000000000000000000000000000000000..c39d84e5cf9d3b6865fd2256b62a621a047849e0 GIT binary patch literal 7251 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_pink.png b/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..073cd3e3e49da147b9a8911e449443f83fe4c338 GIT binary patch literal 5948 zcmeHKc~n!!8czfzY|5gji1rdxK)uP$y;*J|U?71IFc2XMT2yY58%TvDCP5H4iin^n z7PTT$!M<9zYF*lg71vjkDip9D4{j*#A}S&-xbh|eQQzx1?|4r8{_=7rGk4}Uzxlr3 z_stA9UmhiKcJOqdP$uIk6ZNDCjWe$tlhvE$CQczIP9ti5~plFwN zuXPx-Ef3B5$Lm9}BHq>#sZ0)`3>Lz`*kC?_VgeRRfM5{97ofNR!@&B~@^=-fyr+Om z%Ji&;AJE_LN+~6}4eJ##wKwCAAC7Z^@?5UvovcM~jr4cE(w?rjo<) zPPDu#drdL7z2EHlXSjHqyCi<GX9U)ceu-KTL-;T3#cf=7m?s#bF=-=|8sZTVV; zhK%*u=)H1#N!0U@I@Q_^kEET`lJ3uYG&tAs#VNE=yV83}=(yl)THiEF5*#v3XefAU<}vEUxQ z(;ez`N@y9rXs3Pc!lKJ}l27|2CJ)=c|3UJp5r$uE3Ic}i^{_Kl1W-!Aib^f2p!U@1L<)b86q=?$YgDJ zrjd-zj8dpFXQ}vV`h*~dfD8d3NF~h#l#!aEGYK*R=~i9=Xj{6ObjS)Z&kCf+gESK9 zjU>couo(y(nxUP8(t{kJ0HazXh!KbNP=L2Uda~JU5HOkP>FJDgjG;FsF*pNXJM z6oml-HqF(Ui40h0^082KbBIZk%BVG%wR#<7;Utv$G;<)G4#uIk_N5wRvR-5%ItP&S81$zzOp3V%k{Lsq^l3&F89Im5nSI`;P^)_98`6v^ zR(I4YCYeH}0;mbB%KBhQ%ZBTnVUZw7n`*Gm0%CuFG;1~Q#QMNC%ZSyT_YDEldwD-V zzxCY;1}K?KAl9qWEapkYfpp9I0<~VHRST?5HixCbIV>KG@K_v}O>z-fiLfvjCrOM{ zDm5g=Cf=ix>P%)rry?y>fSjQPJS+~6ui@Z4ScR)qFq>ejU_Op=5nMvUBT@Bx z6wyX4$VwvReXA@~YCwf@IVzmXXTv-d4y5Zub z2&XocNFtdAU6OUcBDf$}E)Ark4CGypJcTf8z=S~hM6E6@|X4hlAtqKvPJg31p&$(|UATM=W6x0B3-(ge6Y_fwdp_A`lr#!mKwc^!k)Qdhemz zJ1hg+NllmuF<~YFY40(tczXgL&8cfAAva}i-+N;N<}JFRuy{LO?r(voiLKYNkB)S6-ZC(1qJz81LglA zIz5@RL;(l}vk(|X6f9i8K?Q8iSOi>S2%Y)&yNL6Z8a}FI!KhlJhS?~K4=ec?3&y!h zM9oJqH4pm>UBp-l7Egfk1RPdRPW&HS;1-L7x`+D1AT4^+~ReQsAS&pR((dTpy*tM}a?O*Iy==!@G}SQV0H*O$VR6u}-TC z!RK;6Wu!z*VN%*D6ZY@rSw5ld4dGKw6pEv}rBEp)r9(icomnaiwY%+TWAEi{H$mG% zq4XUn6$dLaF5F+=r1LuI95!I;*+9%w+IqIo{ph-}CpR1ny*#FHx4wcWJy_%pMJ1m5 zBYf|hfRYwQ(JyztUL{FRY`v65$SFszRgW>2$81xKSsSrAX4|U~u35~Phi#9xx3gNG zcv2>h+FW)2KK!7ruCD*)ff4>*!-uy&e0cQC8FxE7yEQTAbQQ%zJDz)G<(0S1`?_Y- zzVihaFMfXc&^+H*cc`nY`gVQU`uf}B*3~p-Mfi{NaE$Q(p>dXCZFE`Co{9>IxFKzL zeSN)o`m-?&b1FBdey-U!w6U?VcxdXyDAWc$+W6y4ZAm{&#oe%H+Roqjt4+7wyct2k zer=i={rqBuzV^0h%8o&)7xy;lv?aMUHId?+olA=Myf7?XE{n^e zp9nyMiCgx4W4=gMEiSr4yLIU5ABp{)^9T0#u7xLwizBbC;FxI<%9io_2PG7EBrT7M zq4Y)4gmTn#*|KcAKD2*1EeRhPJFP${#i;{JzYEbftA&%ip7nS39&fv>`AOZ*?jWtd z6ws{in0d{BiR@QKU6J4Ujh-+)02=9b>U4Bu$TyIwqurI}b-PnNAlkmL`N1{q{0{z7 z-|=~Vey?86tQc}^>hsncx2O)g@7dCn33As2xAnQ=(X@%mH8rkl$|2fDw=pbs1Rhn+ zrcqsU#-7A>Mjsd~cMDnkXx#8n;R4!d#L0JaK|VxVlH_?|)1p;EucFp-eBmaMBG`6# z=&-XJG`!C1FZp_|vrEGC`4U=A)#>vLkFcWLA8+%7HjiJmZxPA2#9h5rA(;^pF#m{% zVUJ81e1*8w@-R9wb5Q3?F$Qfrb5qDEJXGqmrOlxTG3C@YG?E7tG_-1WKH-;J^2hC? zph%Mnu9UcSy{+w=To>TL07cQxI1--yEOZ`B@tyU)TKOK-T)LQb5x zDwzXiYBrAceB+l@W0>doWn^?-^NM%sN9wDsoCk)e$Y$mI%vo47Y`ASx~le;q8X(R ztL|R+2`OwabapVl@#w4;W988iv2KhAmmkk(jl7h0(7iM8h zYO}=`^Oeu2WleP)nb|PH`LlIy{k9Hs4PK@hINCX_>2rhc>7wxKD^5F&&)n25oOG(w z4N05vV7YW!^NUyZ=NYVmU-wOC=ge^2(b0Cje%j@Y_paY{Ire*X^`4-gybfLoZGzV9 zSniv9cM=}dBngpEe$#PvMC=A#zv2t6_S&rQO`ArYn4DDHHlWSc8##6Ear4U7ny!Vc z@8{EPL(CbDSCc1pdaRNcT>ZJCE-I(o1J8D`4cxWN_n1$Z#21A}qc0Y19VY6GuooTo q7h%Hn+xuA0tDa-aT0NR~ZIJ}pyK8yB$j9Kwq)0=f#JfTgv;PevbYE-$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_purple.png b/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..66e8a0f259f13315e384abf2decb7eef18d46a77 GIT binary patch literal 6253 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 Q|2GxGcJ+2S;S|39-ztAspa1{> literal 0 HcmV?d00001 diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/plunder_vine.json b/src/main/resources/data/unicopia/loot_tables/blocks/plunder_vine.json new file mode 100644 index 00000000..857d1f4c --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/plunder_vine.json @@ -0,0 +1,42 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stick" + }, + { + "type": "minecraft:item", + "name": "minecraft:dead_bush" + } + ], + "rolls": 4.0 + }, + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stick" + }, + { + "type": "minecraft:item", + "name": "minecraft:dead_bush" + }, + { + "type": "minecraft:item", + "name": "unicopia:gryphon_feather" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/entities/loot_bug.json b/src/main/resources/data/unicopia/loot_tables/entities/loot_bug.json new file mode 100644 index 00000000..7e8ec0ae --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/entities/loot_bug.json @@ -0,0 +1,87 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 11, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 12.0, + "min": 6.0 + }, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:looting_enchant", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 3.0 + } + } + ], + "name": "minecraft:gold_nugget" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 12.0, + "min": 6.0 + }, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:looting_enchant", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 3.0 + } + } + ], + "name": "minecraft:iron_nugget" + } + ] + }, + { + "rolls": 1, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:tag", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:looting_enchant", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 6.0 + } + } + ], + "name": "unicopia:loot_bug_high_value_drops", + "expand": true + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/tags/items/loot_bug_high_value_drops.json b/src/main/resources/data/unicopia/tags/items/loot_bug_high_value_drops.json new file mode 100644 index 00000000..38c39b74 --- /dev/null +++ b/src/main/resources/data/unicopia/tags/items/loot_bug_high_value_drops.json @@ -0,0 +1,28 @@ +{ + "replace": false, + "values": [ + "minecraft:diamond", + "minecraft:gold_nugget", + "minecraft:iron_nugget", + "#c:gold_ingots", + "#c:raw_gold_ores", + "#c:raw_gold_blocks", + "minecraft:golden_apple", + "minecraft:golden_carrot", + "minecraft:golden_boots", + "minecraft:golden_leggings", + "minecraft:golden_chestplate", + "minecraft:golden_helmet", + "minecraft:golden_horse_armor", + "unicopia:golden_horse_shoe", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:golden_shovel", + "minecraft:golden_sword", + "minecraft:golden_hoe", + "unicopia:golden_polearm", + "unicopia:golden_feather", + "unicopia:golden_wing", + { "id": "farmersdelight:golden_knife", "required": false } + ] +}