diff --git a/assets/spectral_clock_0.xcf b/assets/spectral_clock_0.xcf new file mode 100644 index 00000000..5675c5b0 Binary files /dev/null and b/assets/spectral_clock_0.xcf differ diff --git a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java index 0d4509bb..ab09e503 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java +++ b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java @@ -116,6 +116,7 @@ public interface URenderers { PolearmRenderer.register(UItems.WOODEN_POLEARM, UItems.STONE_POLEARM, UItems.IRON_POLEARM, UItems.GOLDEN_POLEARM, UItems.DIAMOND_POLEARM, UItems.NETHERITE_POLEARM); ModelPredicateProviderRegistry.register(UItems.GEMSTONE, new Identifier("affinity"), (stack, world, entity, seed) -> EnchantableItem.isEnchanted(stack) ? EnchantableItem.getSpellKey(stack).getAffinity().getAlignment() : 0); ModelPredicateProviderRegistry.register(UItems.ROCK_CANDY, new Identifier("count"), (stack, world, entity, seed) -> stack.getCount() / (float)stack.getMaxCount()); + ModelPredicateProviderRegistry.register(Unicopia.id("zap_cycle"), (stack, world, entity, seed) -> UnicopiaClient.getInstance().getZapStageDelta()); ColorProviderRegistry.BLOCK.register(URenderers::getTintedBlockColor, TintedBlock.REGISTRY.stream().toArray(Block[]::new)); ColorProviderRegistry.ITEM.register((stack, i) -> getTintedBlockColor(Block.getBlockFromItem(stack.getItem()).getDefaultState(), null, null, i), TintedBlock.REGISTRY.stream().map(Block::asItem).filter(i -> i != Items.AIR).toArray(Item[]::new)); diff --git a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java index 32b01a8e..9ea6a700 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java +++ b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java @@ -22,6 +22,7 @@ import com.minelittlepony.unicopia.entity.player.PlayerCamera; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.network.handler.ClientNetworkHandlerImpl; import com.minelittlepony.unicopia.server.world.WeatherConditions; +import com.minelittlepony.unicopia.server.world.ZapAppleStageStore; import com.minelittlepony.unicopia.util.Lerp; import net.fabricmc.api.ClientModInitializer; @@ -53,6 +54,9 @@ public class UnicopiaClient implements ClientModInitializer { public final Lerp tangentalSkyAngle = new Lerp(0, true); public final Lerp skyAngle = new Lerp(0, true); + private ZapAppleStageStore.Stage zapAppleStage = ZapAppleStageStore.Stage.HIBERNATING; + private long zapStageTime; + public static Optional getCamera() { PlayerEntity player = MinecraftClient.getInstance().player; @@ -84,6 +88,15 @@ public class UnicopiaClient implements ClientModInitializer { instance = this; } + public void setZapAppleStage(ZapAppleStageStore.Stage stage, long delta) { + zapAppleStage = stage; + zapStageTime = delta; + } + + public float getZapStageDelta() { + return zapAppleStage.getCycleProgress(zapStageTime); + } + public float getSkyAngleDelta(float tickDelta) { if (MinecraftClient.getInstance().world == null) { return 0; @@ -135,6 +148,8 @@ public class UnicopiaClient implements ClientModInitializer { world.setRainGradient(gradient); world.setThunderGradient(gradient); } + + zapStageTime++; } private Float getTargetRainGradient(ClientWorld world, BlockPos pos, float tickDelta) { diff --git a/src/main/java/com/minelittlepony/unicopia/container/SpellbookChapterLoader.java b/src/main/java/com/minelittlepony/unicopia/container/SpellbookChapterLoader.java index 15e0dd3a..d7c7b5dc 100644 --- a/src/main/java/com/minelittlepony/unicopia/container/SpellbookChapterLoader.java +++ b/src/main/java/com/minelittlepony/unicopia/container/SpellbookChapterLoader.java @@ -56,7 +56,7 @@ public class SpellbookChapterLoader extends JsonDataLoader implements Identifiab dirty = false; MsgServerResources msg = new MsgServerResources(); server.getWorlds().forEach(world -> { - Channel.SERVER_RESOURCES_SEND.sendToAllPlayers(msg, world); + Channel.SERVER_RESOURCES.sendToAllPlayers(msg, world); }); } } diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/item/UItems.java index 3aa1e5ea..cf71cf2a 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItems.java @@ -164,6 +164,7 @@ public interface UItems { Item PALM_BASKET = register("palm_basket", new BasketItem(AirBalloonEntity.BasketType.of(UWoodTypes.PALM_BOAT_TYPE), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); Item GIANT_BALLOON = register("giant_balloon", new HotAirBalloonItem(new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + Item SPECTRAL_CLOCK = register("spectral_clock", new Item(new Item.Settings()), ItemGroups.TOOLS); Item LIGHT_GRAY_BED_SHEETS = register(CloudBedBlock.SheetPattern.LIGHT_GRAY); Item GRAY_BED_SHEETS = register(CloudBedBlock.SheetPattern.GRAY); diff --git a/src/main/java/com/minelittlepony/unicopia/network/Channel.java b/src/main/java/com/minelittlepony/unicopia/network/Channel.java index 48592fa2..67f56df1 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/Channel.java +++ b/src/main/java/com/minelittlepony/unicopia/network/Channel.java @@ -3,6 +3,7 @@ package com.minelittlepony.unicopia.network; import com.minelittlepony.unicopia.*; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.server.world.UnicopiaWorldProperties; +import com.minelittlepony.unicopia.server.world.ZapAppleStageStore; import com.sollace.fabwork.api.packets.*; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; @@ -29,11 +30,12 @@ public interface Channel { S2CPacketType> SERVER_SPELLBOOK_UPDATE = SimpleNetworking.serverToClient(Unicopia.id("server_spellbook_update"), MsgSpellbookStateChanged::new); C2SPacketType> CLIENT_SPELLBOOK_UPDATE = SimpleNetworking.clientToServer(Unicopia.id("client_spellbook_update"), MsgSpellbookStateChanged::new); - S2CPacketType SERVER_RESOURCES_SEND = SimpleNetworking.serverToClient(Unicopia.id("resources_send"), MsgServerResources::new); + S2CPacketType SERVER_RESOURCES = SimpleNetworking.serverToClient(Unicopia.id("resources"), MsgServerResources::new); S2CPacketType SERVER_OTHER_PLAYER_CAPABILITIES = SimpleNetworking.serverToClient(Unicopia.id("other_player_capabilities"), MsgOtherPlayerCapabilities::new); S2CPacketType SERVER_PLAYER_ANIMATION_CHANGE = SimpleNetworking.serverToClient(Unicopia.id("other_player_animation_change"), MsgPlayerAnimationChange::new); S2CPacketType SERVER_SKY_ANGLE = SimpleNetworking.serverToClient(Unicopia.id("sky_angle"), MsgSkyAngle::new); + S2CPacketType SERVER_ZAP_STAGE = SimpleNetworking.serverToClient(Unicopia.id("zap_stage"), MsgZapAppleStage::new); static void bootstrap() { ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { @@ -50,8 +52,10 @@ public interface Channel { Unicopia.LOGGER.info("Setting {}'s race to {} due to host setting", handler.player.getDisplayName().getString(), Race.REGISTRY.getId(race).toString()); } } - sender.sendPacket(SERVER_RESOURCES_SEND.id(), new MsgServerResources().toBuffer()); + sender.sendPacket(SERVER_RESOURCES.id(), new MsgServerResources().toBuffer()); sender.sendPacket(SERVER_SKY_ANGLE.id(), new MsgSkyAngle(UnicopiaWorldProperties.forWorld(handler.getPlayer().getServerWorld()).getTangentalSkyAngle()).toBuffer()); + ZapAppleStageStore store = ZapAppleStageStore.get(handler.player.getServerWorld()); + sender.sendPacket(SERVER_ZAP_STAGE.id(), new MsgZapAppleStage(store.getStage(), store.getStageDelta()).toBuffer()); }); } } diff --git a/src/main/java/com/minelittlepony/unicopia/network/MsgZapAppleStage.java b/src/main/java/com/minelittlepony/unicopia/network/MsgZapAppleStage.java new file mode 100644 index 00000000..10bad6c1 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/network/MsgZapAppleStage.java @@ -0,0 +1,23 @@ +package com.minelittlepony.unicopia.network; + +import com.minelittlepony.unicopia.server.world.ZapAppleStageStore; +import com.sollace.fabwork.api.packets.Packet; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.PacketByteBuf; + +public record MsgZapAppleStage ( + ZapAppleStageStore.Stage stage, + long delta + ) implements Packet { + + public MsgZapAppleStage(PacketByteBuf buffer) { + this(buffer.readEnumConstant(ZapAppleStageStore.Stage.class), buffer.readLong()); + } + + @Override + public void toBuffer(PacketByteBuf buffer) { + buffer.writeEnumConstant(stage); + buffer.writeLong(delta); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/network/handler/ClientNetworkHandlerImpl.java b/src/main/java/com/minelittlepony/unicopia/network/handler/ClientNetworkHandlerImpl.java index d2dd56cd..6082dca9 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/handler/ClientNetworkHandlerImpl.java +++ b/src/main/java/com/minelittlepony/unicopia/network/handler/ClientNetworkHandlerImpl.java @@ -36,8 +36,9 @@ public class ClientNetworkHandlerImpl { Channel.SERVER_BLOCK_DESTRUCTION.receiver().addPersistentListener(this::handleBlockDestruction); Channel.CANCEL_PLAYER_ABILITY.receiver().addPersistentListener(this::handleCancelAbility); Channel.UNLOCK_TRAITS.receiver().addPersistentListener(this::handleUnlockTraits); - Channel.SERVER_RESOURCES_SEND.receiver().addPersistentListener(this::handleServerResources); + Channel.SERVER_RESOURCES.receiver().addPersistentListener(this::handleServerResources); Channel.SERVER_SKY_ANGLE.receiver().addPersistentListener(this::handleSkyAngle); + Channel.SERVER_ZAP_STAGE.receiver().addPersistentListener(this::handleZapStage); Channel.SERVER_PLAYER_ANIMATION_CHANGE.receiver().addPersistentListener(this::handlePlayerAnimation); Channel.SERVER_REQUEST_PLAYER_LOOK.receiver().addPersistentListener(this::handleCasterLookRequest); } @@ -93,6 +94,10 @@ public class ClientNetworkHandlerImpl { UnicopiaClient.getInstance().tangentalSkyAngle.update(packet.tangentalSkyAngle(), 200); } + private void handleZapStage(PlayerEntity sender, MsgZapAppleStage packet) { + UnicopiaClient.getInstance().setZapAppleStage(packet.stage(), packet.delta()); + } + @SuppressWarnings("unchecked") private void handleServerResources(PlayerEntity sender, MsgServerResources packet) { SpellTraits.load(packet.traits()); diff --git a/src/main/java/com/minelittlepony/unicopia/server/world/ZapAppleStageStore.java b/src/main/java/com/minelittlepony/unicopia/server/world/ZapAppleStageStore.java index bb936372..cb27244f 100644 --- a/src/main/java/com/minelittlepony/unicopia/server/world/ZapAppleStageStore.java +++ b/src/main/java/com/minelittlepony/unicopia/server/world/ZapAppleStageStore.java @@ -5,6 +5,8 @@ import java.util.stream.StreamSupport; import com.minelittlepony.unicopia.USounds; import com.minelittlepony.unicopia.Unicopia; +import com.minelittlepony.unicopia.network.Channel; +import com.minelittlepony.unicopia.network.MsgZapAppleStage; import com.minelittlepony.unicopia.particle.LightningBoltParticleEffect; import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.util.Tickable; @@ -20,10 +22,13 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.world.PersistentState; import net.minecraft.world.World; +import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.event.GameEvent; public class ZapAppleStageStore extends PersistentState implements Tickable { private static final Identifier ID = Unicopia.id("zap_apple_stage"); + static final long DAY_LENGTH = World.field_30969; + static final long MOON_PHASES = DimensionType.MOON_SIZES.length; public static ZapAppleStageStore get(World world) { return WorldOverlay.getPersistableStorage(world, ID, ZapAppleStageStore::new, ZapAppleStageStore::new); @@ -32,7 +37,9 @@ public class ZapAppleStageStore extends PersistentState implements Tickable { private final World world; private Stage lastStage = Stage.HIBERNATING; - private int countdown; + private long stageDelta; + private long lastTime; + private boolean stageChanged; private boolean playedMoonEffect; private int nextLightningEvent = 1200; @@ -40,8 +47,8 @@ public class ZapAppleStageStore extends PersistentState implements Tickable { ZapAppleStageStore(World world, NbtCompound compound) { this(world); lastStage = Stage.VALUES[Math.max(0, compound.getInt("stage")) % Stage.VALUES.length]; + stageDelta = compound.getLong("stageDelta"); stageChanged = compound.getBoolean("stageChanged"); - countdown = compound.getInt("countdown"); playedMoonEffect = compound.getBoolean("playedMoonEffect"); nextLightningEvent = compound.getInt("nextLightningEvent"); } @@ -55,32 +62,38 @@ public class ZapAppleStageStore extends PersistentState implements Tickable { if (!world.isDay()) { if (nextLightningEvent > 0) { nextLightningEvent--; - markDirty(); } if (!stageChanged && (lastStage != Stage.HIBERNATING || (world.getMoonPhase() == 0))) { stageChanged = true; - if (countDay()) { - lastStage = lastStage.getNext(); - countdown = 1; - playedMoonEffect = false; - markDirty(); - onStageChanged(); - } + lastStage = lastStage.getNext(); + stageDelta = 0; + playedMoonEffect = false; + sendUpdate(); } } else if (stageChanged) { stageChanged = false; - markDirty(); } - } - private boolean countDay() { + long timeOfDay = world.getTimeOfDay(); + if (stageDelta != 0 && (timeOfDay < lastTime || timeOfDay > lastTime + 10)) { + long timeDifference = timeOfDay - lastTime; + Unicopia.LOGGER.info("Times a changing {}!", timeDifference); + while (timeDifference < 0) { + timeDifference += DAY_LENGTH; + } + stageDelta += timeDifference; + sendUpdate(); + } + lastTime = timeOfDay; + + + stageDelta++; markDirty(); - return countdown-- <= 0; } - protected void onStageChanged() { - //world.setRainGradient(0.5F); + protected void sendUpdate() { + Channel.SERVER_ZAP_STAGE.sendToAllPlayers(new MsgZapAppleStage(getStage(), stageDelta), world); } public void playMoonEffect(BlockPos pos) { @@ -112,7 +125,6 @@ public class ZapAppleStageStore extends PersistentState implements Tickable { /** * Returns true during nights that the zap apples must change their states. - * @return */ public boolean hasStageChanged() { return stageChanged; @@ -125,30 +137,60 @@ public class ZapAppleStageStore extends PersistentState implements Tickable { return lastStage; } + public long getStageDelta() { + return stageDelta; + } + + public float getStageProgress() { + return getStage().getStageProgress(getStageDelta()); + } + + public float getCycleProgress() { + return getStage().getCycleProgress(getStageDelta()); + } + @Override public NbtCompound writeNbt(NbtCompound compound) { compound.putInt("stage", lastStage.ordinal()); + compound.putLong("stageDelta", stageDelta); compound.putBoolean("stageChanged", stageChanged); - compound.putInt("countdown", countdown); compound.putBoolean("playedMoonEffect", playedMoonEffect); compound.putInt("nextLightningEvent", nextLightningEvent); return compound; } public enum Stage implements StringIdentifiable { - HIBERNATING, - GREENING, - FLOWERING, - FRUITING, - RIPE; + HIBERNATING(MOON_PHASES * DAY_LENGTH), + GREENING(DAY_LENGTH), + FLOWERING(DAY_LENGTH), + FRUITING(DAY_LENGTH), + RIPE(DAY_LENGTH); - static final long DAY_LENGTH = 24000; static final Stage[] VALUES = values(); + private final long duration; + + Stage(long duration) { + this.duration = duration; + } + public Stage getNext() { return byId((ordinal() + 1) % VALUES.length); } + public Stage getPrevious() { + return byId(((ordinal() - 1) + VALUES.length) % VALUES.length); + } + + public float getStageProgress(long time) { + return (time % duration) / (float)duration; + } + + public float getCycleProgress(long time) { + float ordinal = ordinal(); + return MathHelper.lerp(getStageProgress(time), ordinal, ordinal + 1) / 5F; + } + public static Stage byId(int id) { return VALUES[MathHelper.clamp(id, 0, VALUES.length)]; } diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index 348b9423..a607365d 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -44,6 +44,8 @@ "item.unicopia.palm_chest_boat": "Palm Boat with Chest", "item.unicopia.spellbook": "Spellbook", + "item.unicopia.spectral_clock": "Spectral Clock", + "emi.category.unicopia.spellbook": "Spellbook", "emi.category.unicopia.cloud_shaping": "Shaping", "emi.category.unicopia.growing": "Growing", diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock.json b/src/main/resources/assets/unicopia/models/item/spectral_clock.json new file mode 100644 index 00000000..7e95d97d --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock.json @@ -0,0 +1,29 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_0" + }, + "overrides": [ + { "predicate": { "unicopia:zap_cycle": 0.00}, "model": "unicopia:item/spectral_clock" }, + { "predicate": { "unicopia:zap_cycle": 0.05}, "model": "unicopia:item/spectral_clock_1" }, + { "predicate": { "unicopia:zap_cycle": 0.10}, "model": "unicopia:item/spectral_clock_2" }, + { "predicate": { "unicopia:zap_cycle": 0.15}, "model": "unicopia:item/spectral_clock_3" }, + { "predicate": { "unicopia:zap_cycle": 0.20}, "model": "unicopia:item/spectral_clock_greening_0" }, + { "predicate": { "unicopia:zap_cycle": 0.25}, "model": "unicopia:item/spectral_clock_greening_1" }, + { "predicate": { "unicopia:zap_cycle": 0.30}, "model": "unicopia:item/spectral_clock_greening_2" }, + { "predicate": { "unicopia:zap_cycle": 0.35}, "model": "unicopia:item/spectral_clock_greening_3" }, + { "predicate": { "unicopia:zap_cycle": 0.40}, "model": "unicopia:item/spectral_clock_flowering_0" }, + { "predicate": { "unicopia:zap_cycle": 0.45}, "model": "unicopia:item/spectral_clock_flowering_1" }, + { "predicate": { "unicopia:zap_cycle": 0.50}, "model": "unicopia:item/spectral_clock_flowering_2" }, + { "predicate": { "unicopia:zap_cycle": 0.55}, "model": "unicopia:item/spectral_clock_flowering_3" }, + { "predicate": { "unicopia:zap_cycle": 0.60}, "model": "unicopia:item/spectral_clock_fruiting_0" }, + { "predicate": { "unicopia:zap_cycle": 0.65}, "model": "unicopia:item/spectral_clock_fruiting_1" }, + { "predicate": { "unicopia:zap_cycle": 0.70}, "model": "unicopia:item/spectral_clock_fruiting_2" }, + { "predicate": { "unicopia:zap_cycle": 0.75}, "model": "unicopia:item/spectral_clock_fruiting_3" }, + { "predicate": { "unicopia:zap_cycle": 0.80}, "model": "unicopia:item/spectral_clock_ripe_0" }, + { "predicate": { "unicopia:zap_cycle": 0.85}, "model": "unicopia:item/spectral_clock_ripe_1" }, + { "predicate": { "unicopia:zap_cycle": 0.90}, "model": "unicopia:item/spectral_clock_ripe_2" }, + { "predicate": { "unicopia:zap_cycle": 0.95}, "model": "unicopia:item/spectral_clock_ripe_3" }, + { "predicate": { "unicopia:zap_cycle": 1.00}, "model": "unicopia:item/spectral_clock" } + ] +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_1.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_1.json new file mode 100644 index 00000000..400741ed --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_1" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_2.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_2.json new file mode 100644 index 00000000..787a4b8c --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_2" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_3.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_3.json new file mode 100644 index 00000000..8913008e --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_3.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_3" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_0.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_0.json new file mode 100644 index 00000000..59db2a20 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_0.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_flowering_0" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_1.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_1.json new file mode 100644 index 00000000..cfa05c39 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_flowering_1" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_2.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_2.json new file mode 100644 index 00000000..90307acf --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_flowering_2" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_3.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_3.json new file mode 100644 index 00000000..110a9d8f --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_flowering_3.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_flowering_3" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_0.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_0.json new file mode 100644 index 00000000..c076b00b --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_0.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_fruiting_0" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_1.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_1.json new file mode 100644 index 00000000..8a9faa82 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_fruiting_1" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_2.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_2.json new file mode 100644 index 00000000..cae50ca0 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_fruiting_2" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_3.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_3.json new file mode 100644 index 00000000..d2a97210 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_fruiting_3.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_fruiting_3" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_0.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_0.json new file mode 100644 index 00000000..8f4d3428 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_0.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_greening_0" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_1.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_1.json new file mode 100644 index 00000000..3633579d --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_greening_1" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_2.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_2.json new file mode 100644 index 00000000..d36dd4a4 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_greening_2" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_3.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_3.json new file mode 100644 index 00000000..03151fdb --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_greening_3.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_greening_3" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_0.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_0.json new file mode 100644 index 00000000..f8322a56 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_0.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_ripe_0" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_1.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_1.json new file mode 100644 index 00000000..43b85fd6 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_ripe_1" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_2.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_2.json new file mode 100644 index 00000000..7bd07507 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_ripe_2" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_3.json b/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_3.json new file mode 100644 index 00000000..60a8cfd9 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/spectral_clock_ripe_3.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/spectral_clock_ripe_3" + } +} diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_0.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_0.png new file mode 100644 index 00000000..8591477b Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_0.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_1.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_1.png new file mode 100644 index 00000000..1cd94355 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_1.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_2.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_2.png new file mode 100644 index 00000000..b6ca8164 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_2.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_3.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_3.png new file mode 100644 index 00000000..92f6e428 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_3.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_3.xcf b/src/main/resources/assets/unicopia/textures/item/spectral_clock_3.xcf new file mode 100644 index 00000000..93e0c89a Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_3.xcf differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_0.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_0.png new file mode 100644 index 00000000..31063a11 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_0.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_1.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_1.png new file mode 100644 index 00000000..a69d288d Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_1.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_2.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_2.png new file mode 100644 index 00000000..698a20a7 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_2.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_3.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_3.png new file mode 100644 index 00000000..de3e77a6 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_flowering_3.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_0.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_0.png new file mode 100644 index 00000000..9be87cb4 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_0.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_1.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_1.png new file mode 100644 index 00000000..6884c01b Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_1.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_2.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_2.png new file mode 100644 index 00000000..78c13d32 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_2.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_3.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_3.png new file mode 100644 index 00000000..ec8b07b9 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_fruiting_3.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_0.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_0.png new file mode 100644 index 00000000..54c1277e Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_0.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_1.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_1.png new file mode 100644 index 00000000..a6ceabe3 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_1.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_2.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_2.png new file mode 100644 index 00000000..791560a9 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_2.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_3.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_3.png new file mode 100644 index 00000000..37fa366a Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_greening_3.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_0.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_0.png new file mode 100644 index 00000000..5e8c4f31 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_0.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_1.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_1.png new file mode 100644 index 00000000..561ea8b3 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_1.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_2.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_2.png new file mode 100644 index 00000000..24f86eae Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_2.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_3.png b/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_3.png new file mode 100644 index 00000000..9f228247 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/spectral_clock_ripe_3.png differ