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 00000000..c39d84e5 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/block/plunder_leaf.png differ diff --git a/src/main/resources/assets/unicopia/textures/block/plunder_vine.png b/src/main/resources/assets/unicopia/textures/block/plunder_vine.png new file mode 100644 index 00000000..bbb80a1c Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/block/plunder_vine.png differ diff --git a/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_cyan.png b/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_cyan.png new file mode 100644 index 00000000..6b8e44e0 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_cyan.png differ 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 00000000..073cd3e3 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_pink.png differ 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 00000000..66e8a0f2 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_purple.png differ diff --git a/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_yellow.png b/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_yellow.png new file mode 100644 index 00000000..ba42e9c4 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/entity/bed/sheets/original_yellow.png differ diff --git a/src/main/resources/assets/unicopia/textures/entity/loot_bug.png b/src/main/resources/assets/unicopia/textures/entity/loot_bug.png new file mode 100644 index 00000000..0c1d56ec Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/entity/loot_bug.png differ 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 } + ] +}