diff --git a/.github/workflows/push_build_and_release.yml b/.github/workflows/push_build_and_release.yml index 5f48e3a..00ebbc4 100644 --- a/.github/workflows/push_build_and_release.yml +++ b/.github/workflows/push_build_and_release.yml @@ -27,10 +27,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: 'temurin' - name: Validate Gradle Wrapper uses: gradle/actions/wrapper-validation@v3 @@ -63,10 +63,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: 'temurin' - name: Validate Gradle Wrapper uses: gradle/actions/wrapper-validation@v3 diff --git a/CHANGELOG.md b/CHANGELOG.md index 942dcdc..cd95269 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +remorphed 3.6.2 +================ +- update to CraftedCore 4.2 & Walkers 4.4.2 +- temporarily disable caching thread in menu to prevent wrong rendering + remorphed 3.6.1 ================ - fix issues with entity caching in menu diff --git a/build.gradle b/build.gradle index 8ebd6f1..af29469 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,6 @@ apply from: "https://raw.githubusercontent.com/ToCraft/GradleMaster/main/main.gr ext { mod_meta = [ minecraft_version : minecraft_version, version: version, - architectury_version: architectury_version, craftedcore_version : craftedcore_version, woodwalkers_version : woodwalkers_version ] diff --git a/common/build.gradle b/common/build.gradle index d1337a5..d34cd2b 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,7 +1,6 @@ apply from: "https://raw.githubusercontent.com/ToCraft/GradleMaster/main/common.gradle" dependencies { - modApi "dev.architectury:architectury:${rootProject.architectury_version}" modApi "dev.tocraft:craftedcore:${rootProject.minecraft_version}-${rootProject.craftedcore_version}" modApi "dev.tocraft:walkers:${rootProject.minecraft_version}-${rootProject.woodwalkers_version}" } \ No newline at end of file diff --git a/common/src/main/java/tocraft/remorphed/Remorphed.java b/common/src/main/java/tocraft/remorphed/Remorphed.java index e6d6df5..c655455 100644 --- a/common/src/main/java/tocraft/remorphed/Remorphed.java +++ b/common/src/main/java/tocraft/remorphed/Remorphed.java @@ -1,11 +1,7 @@ package tocraft.remorphed; -import dev.architectury.event.events.common.CommandRegistrationEvent; -import dev.architectury.event.events.common.PlayerEvent; -import dev.architectury.networking.NetworkManager; -import dev.architectury.platform.Platform; -import dev.architectury.utils.Env; import io.netty.buffer.Unpooled; +import net.fabricmc.api.EnvType; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -19,14 +15,21 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tocraft.craftedcore.config.ConfigLoader; +import tocraft.craftedcore.event.common.CommandEvents; +import tocraft.craftedcore.event.common.EntityEvents; +import tocraft.craftedcore.event.common.PlayerEvents; +import tocraft.craftedcore.network.ModernNetworking; +import tocraft.craftedcore.platform.PlatformData; import tocraft.craftedcore.platform.VersionChecker; import tocraft.remorphed.command.RemorphedCommand; import tocraft.remorphed.config.RemorphedConfig; import tocraft.remorphed.events.ShapeEventsCallback; +import tocraft.remorphed.handler.LivingDeathHandler; +import tocraft.remorphed.handler.PlayerRespawnHandler; import tocraft.remorphed.impl.RemorphedPlayerDataProvider; import tocraft.remorphed.network.NetworkHandler; import tocraft.walkers.Walkers; -import tocraft.walkers.api.event.ShapeEvents; +import tocraft.walkers.api.events.ShapeEvents; import tocraft.walkers.api.variant.ShapeType; import java.util.ArrayList; @@ -40,28 +43,30 @@ public class Remorphed { public static final String MODID = "remorphed"; public static final RemorphedConfig CONFIG = ConfigLoader.read(MODID, RemorphedConfig.class); public static boolean displayVariantsInMenu = true; - public static boolean displaySkillsInMenu = true; + public static boolean displayTraitsInMenu = true; public void initialize() { // add DarkShadow_2k to devs (for creating the special shape icon and concepts) Walkers.devs.add(UUID.fromString("74b6d9b3-c8c1-40db-ab82-ccc290d1aa03")); - VersionChecker.registerDefaultGitHubChecker(MODID, "ToCraft", "Remorphed", new TextComponent("Remorphed")); + VersionChecker.registerModrinthChecker(MODID, "remorphed", new TextComponent("Remorphed")); - if (Platform.getEnvironment() == Env.CLIENT) new RemorphedClient().initialize(); + if (PlatformData.getEnv() == EnvType.CLIENT) new RemorphedClient().initialize(); NetworkHandler.registerPacketReceiver(); ShapeEvents.UNLOCK_SHAPE.register(((player, type) -> new ShapeEventsCallback().event(player, type))); ShapeEvents.SWAP_SHAPE.register(((player, shape) -> new ShapeEventsCallback().event(player, ShapeType.from(shape)))); - CommandRegistrationEvent.EVENT.register(new RemorphedCommand()); + CommandEvents.REGISTRATION.register(new RemorphedCommand()); + EntityEvents.LIVING_DEATH.register(new LivingDeathHandler()); + PlayerEvents.PLAYER_RESPAWN.register(new PlayerRespawnHandler()); // allow unlocking friendly mobs via the "normal" method Walkers.CONFIG.unlockOverridesCurrentShape = Remorphed.CONFIG.unlockFriendlyNormal; Walkers.CONFIG.save(); // Sync favorites - PlayerEvent.PLAYER_JOIN.register(NetworkHandler::sendFavoriteSync); + PlayerEvents.PLAYER_JOIN.register(NetworkHandler::sendFavoriteSync); } public static boolean canUseEveryShape(Player player) { @@ -117,9 +122,8 @@ public static void sync(ServerPlayer changed, ServerPlayer packetTarget) { if (!unlockedShapes.isEmpty()) compoundTag.put("UnlockedShapes", list); - packet.writeUUID(changed.getUUID()); - packet.writeNbt(compoundTag); - NetworkManager.sendToPlayer(packetTarget, NetworkHandler.UNLOCKED_SYNC, packet); + compoundTag.putUUID("uuid", changed.getUUID()); + ModernNetworking.sendToPlayer(packetTarget, NetworkHandler.UNLOCKED_SYNC, compoundTag); } public static ResourceLocation id(String name) { diff --git a/common/src/main/java/tocraft/remorphed/RemorphedClient.java b/common/src/main/java/tocraft/remorphed/RemorphedClient.java index 7994fd2..21e76aa 100644 --- a/common/src/main/java/tocraft/remorphed/RemorphedClient.java +++ b/common/src/main/java/tocraft/remorphed/RemorphedClient.java @@ -1,12 +1,14 @@ package tocraft.remorphed; import com.mojang.blaze3d.platform.InputConstants; -import dev.architectury.event.events.client.ClientTickEvent; -import dev.architectury.registry.client.keymappings.KeyMappingRegistry; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.KeyMapping; import org.lwjgl.glfw.GLFW; +import tocraft.craftedcore.event.client.ClientPlayerEvents; +import tocraft.craftedcore.event.client.ClientTickEvents; +import tocraft.craftedcore.registration.KeyBindingRegistry; +import tocraft.remorphed.handler.client.ClientPlayerRespawnHandler; import tocraft.remorphed.network.ClientNetworking; import tocraft.remorphed.tick.KeyPressHandler; @@ -16,10 +18,12 @@ public class RemorphedClient { GLFW.GLFW_KEY_GRAVE_ACCENT, "key.categories.remorphed"); public void initialize() { - KeyMappingRegistry.register(MENU_KEY); + KeyBindingRegistry.register(MENU_KEY); // Register event handlers - ClientTickEvent.CLIENT_PRE.register(new KeyPressHandler()); + ClientTickEvents.CLIENT_PRE.register(new KeyPressHandler()); ClientNetworking.registerPacketHandlers(); + + ClientPlayerEvents.CLIENT_PLAYER_RESPAWN.register(new ClientPlayerRespawnHandler()); } } diff --git a/common/src/main/java/tocraft/remorphed/command/RemorphedCommand.java b/common/src/main/java/tocraft/remorphed/command/RemorphedCommand.java index 72351ab..2bbb998 100644 --- a/common/src/main/java/tocraft/remorphed/command/RemorphedCommand.java +++ b/common/src/main/java/tocraft/remorphed/command/RemorphedCommand.java @@ -2,7 +2,6 @@ import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.tree.LiteralCommandNode; -import dev.architectury.event.events.common.CommandRegistrationEvent; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.commands.Commands.CommandSelection; @@ -21,12 +20,13 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import org.jetbrains.annotations.Nullable; +import tocraft.craftedcore.event.common.CommandEvents; import tocraft.remorphed.Remorphed; import tocraft.remorphed.impl.RemorphedPlayerDataProvider; import tocraft.walkers.api.PlayerShapeChanger; import tocraft.walkers.api.variant.ShapeType; -public class RemorphedCommand implements CommandRegistrationEvent { +public class RemorphedCommand implements CommandEvents.CommandRegistration { private static int hasShape(CommandSourceStack source, ServerPlayer player, ResourceLocation id, @Nullable CompoundTag nbt) { ShapeType type = getType(source.getLevel(), id, nbt); Component name = new TranslatableComponent(type.getEntityType().getDescriptionId()); diff --git a/common/src/main/java/tocraft/remorphed/config/RemorphedConfig.java b/common/src/main/java/tocraft/remorphed/config/RemorphedConfig.java index eb9feae..29e7a76 100644 --- a/common/src/main/java/tocraft/remorphed/config/RemorphedConfig.java +++ b/common/src/main/java/tocraft/remorphed/config/RemorphedConfig.java @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.Map; +@SuppressWarnings("CanBeFinal") public class RemorphedConfig implements Config { @Synchronize public boolean creativeUnlockAll = true; diff --git a/common/src/main/java/tocraft/remorphed/events/ShapeEventsCallback.java b/common/src/main/java/tocraft/remorphed/events/ShapeEventsCallback.java index 95ca2a8..35838cf 100644 --- a/common/src/main/java/tocraft/remorphed/events/ShapeEventsCallback.java +++ b/common/src/main/java/tocraft/remorphed/events/ShapeEventsCallback.java @@ -1,7 +1,7 @@ package tocraft.remorphed.events; -import dev.architectury.event.EventResult; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.monster.Enemy; @@ -11,7 +11,7 @@ import tocraft.walkers.api.variant.ShapeType; public class ShapeEventsCallback { - public EventResult event(ServerPlayer player, ShapeType type) { + public InteractionResult event(ServerPlayer player, ShapeType type) { // check if the walkers unlock mechanic should be used if (!Remorphed.CONFIG.lockTransform && Remorphed.CONFIG.unlockFriendlyNormal) { LivingEntity entityToBeUnlocked = type.create(player.level); @@ -21,9 +21,9 @@ public EventResult event(ServerPlayer player, ShapeType type) { // check if entity is unlocked by remorphed, prevents native unlock mechanic by walkers else if (!Remorphed.canUseShape(player, type)) { if (!Walkers.hasSpecialShape(player.getUUID()) || !type.getEntityType().equals(EntityType.WOLF)) - return EventResult.interruptFalse(); + return InteractionResult.FAIL; } - return EventResult.pass(); + return InteractionResult.PASS; } } diff --git a/common/src/main/java/tocraft/remorphed/mixin/LivingEntityMixin.java b/common/src/main/java/tocraft/remorphed/handler/LivingDeathHandler.java similarity index 50% rename from common/src/main/java/tocraft/remorphed/mixin/LivingEntityMixin.java rename to common/src/main/java/tocraft/remorphed/handler/LivingDeathHandler.java index 498578a..f3625c4 100644 --- a/common/src/main/java/tocraft/remorphed/mixin/LivingEntityMixin.java +++ b/common/src/main/java/tocraft/remorphed/handler/LivingDeathHandler.java @@ -1,33 +1,22 @@ -package tocraft.remorphed.mixin; +package tocraft.remorphed.handler; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import tocraft.craftedcore.event.common.EntityEvents; import tocraft.remorphed.Remorphed; import tocraft.remorphed.impl.RemorphedPlayerDataProvider; import tocraft.walkers.api.PlayerShape; import tocraft.walkers.api.PlayerShapeChanger; import tocraft.walkers.api.variant.ShapeType; -@Mixin(LivingEntity.class) -public abstract class LivingEntityMixin extends Entity { - - private LivingEntityMixin(EntityType type, Level world) { - super(type, world); - } - - @Inject(method = "die", at = @At("HEAD")) - public void onDeath(DamageSource damageSource, CallbackInfo ci) { - if (!((Object) this instanceof Player) && damageSource.getEntity() instanceof ServerPlayer killer) { - ShapeType type = ShapeType.from((LivingEntity) (Object) this); +public class LivingDeathHandler implements EntityEvents.LivingDeath { + @Override + public InteractionResult die(LivingEntity entity, DamageSource source) { + if (!(entity instanceof Player) && source.getEntity() instanceof ServerPlayer killer) { + ShapeType type = ShapeType.from(entity); if (type != null) { ((RemorphedPlayerDataProvider) killer).remorphed$addKill(type); @@ -37,5 +26,7 @@ public void onDeath(DamageSource damageSource, CallbackInfo ci) { } } } + + return InteractionResult.PASS; } } diff --git a/common/src/main/java/tocraft/remorphed/handler/PlayerRespawnHandler.java b/common/src/main/java/tocraft/remorphed/handler/PlayerRespawnHandler.java new file mode 100644 index 0000000..63348b0 --- /dev/null +++ b/common/src/main/java/tocraft/remorphed/handler/PlayerRespawnHandler.java @@ -0,0 +1,16 @@ +package tocraft.remorphed.handler; + +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.server.level.ServerPlayer; +import tocraft.craftedcore.event.client.ClientPlayerEvents; +import tocraft.craftedcore.event.common.PlayerEvents; +import tocraft.remorphed.impl.RemorphedPlayerDataProvider; + +public class PlayerRespawnHandler implements PlayerEvents.PlayerRespawn { + @Override + public void clone(ServerPlayer oldPlayer, ServerPlayer newPlayer) { + ((RemorphedPlayerDataProvider) newPlayer).remorphed$setUnlockedShapes(((RemorphedPlayerDataProvider) oldPlayer).remorphed$getUnlockedShapes()); + ((RemorphedPlayerDataProvider) newPlayer).remorphed$getFavorites().clear(); + ((RemorphedPlayerDataProvider) newPlayer).remorphed$getFavorites().addAll(((RemorphedPlayerDataProvider) oldPlayer).remorphed$getFavorites()); + } +} diff --git a/common/src/main/java/tocraft/remorphed/handler/client/ClientPlayerRespawnHandler.java b/common/src/main/java/tocraft/remorphed/handler/client/ClientPlayerRespawnHandler.java new file mode 100644 index 0000000..ee5d159 --- /dev/null +++ b/common/src/main/java/tocraft/remorphed/handler/client/ClientPlayerRespawnHandler.java @@ -0,0 +1,14 @@ +package tocraft.remorphed.handler.client; + +import net.minecraft.client.player.LocalPlayer; +import tocraft.craftedcore.event.client.ClientPlayerEvents; +import tocraft.remorphed.impl.RemorphedPlayerDataProvider; + +public class ClientPlayerRespawnHandler implements ClientPlayerEvents.ClientPlayerRespawn { + @Override + public void respawn(LocalPlayer oldPlayer, LocalPlayer newPlayer) { + ((RemorphedPlayerDataProvider) newPlayer).remorphed$setUnlockedShapes(((RemorphedPlayerDataProvider) oldPlayer).remorphed$getUnlockedShapes()); + ((RemorphedPlayerDataProvider) newPlayer).remorphed$getFavorites().clear(); + ((RemorphedPlayerDataProvider) newPlayer).remorphed$getFavorites().addAll(((RemorphedPlayerDataProvider) oldPlayer).remorphed$getFavorites()); + } +} diff --git a/common/src/main/java/tocraft/remorphed/mixin/ClientPlayerDataCacheMixin.java b/common/src/main/java/tocraft/remorphed/mixin/ClientPlayerDataCacheMixin.java deleted file mode 100644 index 4d9edd8..0000000 --- a/common/src/main/java/tocraft/remorphed/mixin/ClientPlayerDataCacheMixin.java +++ /dev/null @@ -1,47 +0,0 @@ -package tocraft.remorphed.mixin; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.network.protocol.game.ClientboundRespawnPacket; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import tocraft.remorphed.impl.RemorphedPlayerDataProvider; - -@Environment(EnvType.CLIENT) -@Mixin(ClientPacketListener.class) -public abstract class ClientPlayerDataCacheMixin { - @Shadow - @Final - private Minecraft minecraft; - @Unique - private RemorphedPlayerDataProvider remorphed$dataCache = null; - - // This @Inject caches the custom data attached to this client's player before it - // is reset when changing dimensions. - // For example, switching from The End => Overworld will reset the player's NBT. - @Inject(method = "handleRespawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;createPlayer(Lnet/minecraft/client/multiplayer/ClientLevel;Lnet/minecraft/stats/StatsCounter;Lnet/minecraft/client/ClientRecipeBook;ZZ)Lnet/minecraft/client/player/LocalPlayer;")) - private void beforePlayerReset(ClientboundRespawnPacket packet, CallbackInfo ci) { - remorphed$dataCache = ((RemorphedPlayerDataProvider) minecraft.player); - } - - // This inject applies data cached from the previous inject. - // Re-applying on the client will help to prevent sync blips which occur when - // wiping data and waiting for the server to send a sync packet. - @Inject(method = "handleRespawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;dimension()Lnet/minecraft/resources/ResourceKey;", ordinal = 1)) - private void afterPlayerReset(ClientboundRespawnPacket packet, CallbackInfo ci) { - if (remorphed$dataCache != null && minecraft.player != null) { - ((RemorphedPlayerDataProvider) minecraft.player).remorphed$setUnlockedShapes(remorphed$dataCache.remorphed$getUnlockedShapes()); - ((RemorphedPlayerDataProvider) minecraft.player).remorphed$getFavorites().clear(); - ((RemorphedPlayerDataProvider) minecraft.player).remorphed$getFavorites().addAll(remorphed$dataCache.remorphed$getFavorites()); - } - - remorphed$dataCache = null; - } -} \ No newline at end of file diff --git a/common/src/main/java/tocraft/remorphed/mixin/PlayerEntityMixin.java b/common/src/main/java/tocraft/remorphed/mixin/PlayerEntityMixin.java index 9e62e99..dcd742f 100644 --- a/common/src/main/java/tocraft/remorphed/mixin/PlayerEntityMixin.java +++ b/common/src/main/java/tocraft/remorphed/mixin/PlayerEntityMixin.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.Set; +@SuppressWarnings({"DataFlowIssue", "resource", "ControlFlowStatementWithoutBraces"}) @Mixin(Player.class) public abstract class PlayerEntityMixin extends LivingEntity implements RemorphedPlayerDataProvider { @Unique diff --git a/common/src/main/java/tocraft/remorphed/mixin/ServerPlayerEntityMixin.java b/common/src/main/java/tocraft/remorphed/mixin/ServerPlayerEntityMixin.java deleted file mode 100644 index 695910f..0000000 --- a/common/src/main/java/tocraft/remorphed/mixin/ServerPlayerEntityMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package tocraft.remorphed.mixin; - -import net.minecraft.server.level.ServerPlayer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import tocraft.remorphed.impl.RemorphedPlayerDataProvider; - -@Mixin(ServerPlayer.class) -public class ServerPlayerEntityMixin { - - @Inject(method = "restoreFrom", at = @At("TAIL")) - private void copyWalkersData(ServerPlayer oldPlayer, boolean alive, CallbackInfo ci) { - RemorphedPlayerDataProvider oldData = ((RemorphedPlayerDataProvider) oldPlayer); - RemorphedPlayerDataProvider newData = ((RemorphedPlayerDataProvider) this); - - // Transfer data from the old ServerPlayer -> new ServerPlayer - newData.remorphed$setUnlockedShapes(oldData.remorphed$getUnlockedShapes()); - } -} diff --git a/common/src/main/java/tocraft/remorphed/network/ClientNetworking.java b/common/src/main/java/tocraft/remorphed/network/ClientNetworking.java index 05a0169..c70fcd3 100644 --- a/common/src/main/java/tocraft/remorphed/network/ClientNetworking.java +++ b/common/src/main/java/tocraft/remorphed/network/ClientNetworking.java @@ -1,19 +1,18 @@ package tocraft.remorphed.network; -import dev.architectury.networking.NetworkManager; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import org.jetbrains.annotations.Nullable; import tocraft.craftedcore.client.CraftedCoreClient; +import tocraft.craftedcore.network.ModernNetworking; import tocraft.craftedcore.network.client.ClientNetworking.ApplicablePacket; import tocraft.remorphed.impl.RemorphedPlayerDataProvider; import tocraft.walkers.api.variant.ShapeType; @@ -25,17 +24,16 @@ @Environment(EnvType.CLIENT) public class ClientNetworking { public static void registerPacketHandlers() { - NetworkManager.registerReceiver(NetworkManager.Side.S2C, NetworkHandler.UNLOCKED_SYNC, + ModernNetworking.registerReceiver(ModernNetworking.Side.S2C, NetworkHandler.UNLOCKED_SYNC, ClientNetworking::handleUnlockedSyncPacket); - NetworkManager.registerReceiver(NetworkManager.Side.S2C, NetworkHandler.FAVORITE_SYNC, ClientNetworking::handleFavoriteSyncPacket); + ModernNetworking.registerReceiver(ModernNetworking.Side.S2C, NetworkHandler.FAVORITE_SYNC, ClientNetworking::handleFavoriteSyncPacket); } @SuppressWarnings("unchecked") - public static void handleUnlockedSyncPacket(FriendlyByteBuf packet, NetworkManager.PacketContext context) { - final UUID uuid = packet.readUUID(); - final CompoundTag compound = packet.readNbt(); + public static void handleUnlockedSyncPacket(ModernNetworking.Context context, CompoundTag compound) { + final UUID uuid = compound.getUUID("uuid"); final Map, Integer> unlockedShapes = new HashMap<>(); - if (compound != null && compound.contains("UnlockedShapes") && compound.get("UnlockedShapes") instanceof ListTag list) { + if (compound.contains("UnlockedShapes") && compound.get("UnlockedShapes") instanceof ListTag list) { list.forEach(entryTag -> { EntityType eType = (EntityType) Registry.ENTITY_TYPE.get(new ResourceLocation(((CompoundTag) entryTag).getString("id"))); int variant = ((CompoundTag) entryTag).getInt("variant"); @@ -54,20 +52,16 @@ public static void handleUnlockedSyncPacket(FriendlyByteBuf packet, NetworkManag } - private static void handleFavoriteSyncPacket(FriendlyByteBuf packet, NetworkManager.PacketContext context) { - CompoundTag tag = packet.readNbt(); - - if (tag != null) { - ClientNetworking.runOrQueue(context, player -> { - RemorphedPlayerDataProvider data = (RemorphedPlayerDataProvider) player; - data.remorphed$getFavorites().clear(); - ListTag idList = tag.getList("FavoriteShapes", Tag.TAG_COMPOUND); - idList.forEach(compound -> data.remorphed$getFavorites().add(ShapeType.from((CompoundTag) compound))); - }); - } + private static void handleFavoriteSyncPacket(ModernNetworking.Context context, CompoundTag tag) { + ClientNetworking.runOrQueue(context, player -> { + RemorphedPlayerDataProvider data = (RemorphedPlayerDataProvider) player; + data.remorphed$getFavorites().clear(); + ListTag idList = tag.getList("FavoriteShapes", Tag.TAG_COMPOUND); + idList.forEach(compound -> data.remorphed$getFavorites().add(ShapeType.from((CompoundTag) compound))); + }); } - public static void runOrQueue(NetworkManager.PacketContext context, ApplicablePacket packet) { + public static void runOrQueue(ModernNetworking.Context context, ApplicablePacket packet) { if (context.getPlayer() == null) { CraftedCoreClient.getSyncPacketQueue().add(packet); } else { diff --git a/common/src/main/java/tocraft/remorphed/network/NetworkHandler.java b/common/src/main/java/tocraft/remorphed/network/NetworkHandler.java index 5f9170b..50ce691 100644 --- a/common/src/main/java/tocraft/remorphed/network/NetworkHandler.java +++ b/common/src/main/java/tocraft/remorphed/network/NetworkHandler.java @@ -1,11 +1,8 @@ package tocraft.remorphed.network; -import dev.architectury.networking.NetworkManager; -import io.netty.buffer.Unpooled; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -13,6 +10,7 @@ import net.minecraft.world.entity.LivingEntity; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import tocraft.craftedcore.network.ModernNetworking; import tocraft.remorphed.Remorphed; import tocraft.remorphed.impl.RemorphedPlayerDataProvider; import tocraft.walkers.Walkers; @@ -29,26 +27,20 @@ public class NetworkHandler { public static final ResourceLocation FAVORITE_UPDATE = Remorphed.id("favorite_update"); public static void registerPacketReceiver() { - NetworkManager.registerReceiver(NetworkManager.Side.C2S, NetworkHandler.SHAPE_REQUEST, NetworkHandler::handleShapeRequestPacket); - NetworkManager.registerReceiver(NetworkManager.Side.C2S, FAVORITE_UPDATE, NetworkHandler::handleFavoriteRequestPacket); + ModernNetworking.registerReceiver(ModernNetworking.Side.C2S, NetworkHandler.SHAPE_REQUEST, NetworkHandler::handleShapeRequestPacket); + ModernNetworking.registerReceiver(ModernNetworking.Side.C2S, FAVORITE_UPDATE, NetworkHandler::handleFavoriteRequestPacket); } public static void sendSwap2ndShapeRequest(@NotNull ShapeType type) { - FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); - CompoundTag compound = new CompoundTag(); compound.putString("id", Registry.ENTITY_TYPE.getKey(type.getEntityType()).toString()); compound.putInt("variant", type.getVariantData()); - buf.writeNbt(compound); - - NetworkManager.sendToServer(NetworkHandler.SHAPE_REQUEST, buf); + ModernNetworking.sendToServer(NetworkHandler.SHAPE_REQUEST, compound); } - @SuppressWarnings({"ALL"}) - private static void handleShapeRequestPacket(FriendlyByteBuf packet, NetworkManager.PacketContext context) { - CompoundTag compound = packet.readNbt(); - + @SuppressWarnings({"DataFlowIssue", "unchecked"}) + private static void handleShapeRequestPacket(ModernNetworking.Context context, CompoundTag compound) { context.getPlayer().getServer().execute(() -> { // check if player is blacklisted if (Walkers.CONFIG.playerUUIDBlacklist.contains(context.getPlayer().getUUID())) { @@ -82,24 +74,22 @@ public static void sendFavoriteSync(ServerPlayer player) { tag.put("FavoriteShapes", idList); // Create & send packet with NBT - FriendlyByteBuf packet = new FriendlyByteBuf(Unpooled.buffer()); - packet.writeNbt(tag); - NetworkManager.sendToPlayer(player, NetworkHandler.FAVORITE_SYNC, packet); + ModernNetworking.sendToPlayer(player, NetworkHandler.FAVORITE_SYNC, tag); } public static void sendFavoriteRequest(ShapeType type, boolean favorite) { - FriendlyByteBuf packet = new FriendlyByteBuf(Unpooled.buffer()); - packet.writeResourceLocation(Registry.ENTITY_TYPE.getKey(type.getEntityType())); - packet.writeInt(type.getVariantData()); - packet.writeBoolean(favorite); - NetworkManager.sendToServer(FAVORITE_UPDATE, packet); + CompoundTag packet = new CompoundTag(); + packet.putString("id", Registry.ENTITY_TYPE.getKey(type.getEntityType()).toString()); + packet.putInt("variant", type.getVariantData()); + packet.putBoolean("favorite", favorite); + ModernNetworking.sendToServer(FAVORITE_UPDATE, packet); } - @SuppressWarnings("ALL") - private static void handleFavoriteRequestPacket(FriendlyByteBuf packet, NetworkManager.PacketContext context) { - EntityType entityType = (EntityType) Registry.ENTITY_TYPE.get(packet.readResourceLocation()); - int variant = packet.readInt(); - boolean favorite = packet.readBoolean(); + @SuppressWarnings({"unchecked", "DataFlowIssue"}) + private static void handleFavoriteRequestPacket(ModernNetworking.Context context, CompoundTag packet) { + EntityType entityType = (EntityType) Registry.ENTITY_TYPE.get(new ResourceLocation(packet.getString("id"))); + int variant = packet.getInt("variant"); + boolean favorite = packet.getBoolean("favorite"); RemorphedPlayerDataProvider playerData = (RemorphedPlayerDataProvider) context.getPlayer(); context.getPlayer().getServer().execute(() -> { diff --git a/common/src/main/java/tocraft/remorphed/screen/RemorphedScreen.java b/common/src/main/java/tocraft/remorphed/screen/RemorphedScreen.java index 02fb904..846a69b 100644 --- a/common/src/main/java/tocraft/remorphed/screen/RemorphedScreen.java +++ b/common/src/main/java/tocraft/remorphed/screen/RemorphedScreen.java @@ -31,6 +31,7 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.stream.Collectors; +@SuppressWarnings({"DataFlowIssue", "SequencedCollectionMethodCanBeUsed"}) @Environment(EnvType.CLIENT) public class RemorphedScreen extends Screen { private final List> unlocked = new CopyOnWriteArrayList<>(); @@ -39,7 +40,7 @@ public class RemorphedScreen extends Screen { private final SearchWidget searchBar = createSearchBar(); private final Button helpButton = createHelpButton(); private final Button variantsButton = createVariantsButton(); - private final Button skillsButton = createSkillsButton(); + private final Button traitsButton = createTraitsButton(); private final PlayerWidget playerButton = createPlayerButton(); private final SpecialShapeWidget specialShapeButton = createSpecialShapeButton(); private String lastSearchContents = ""; @@ -61,48 +62,46 @@ public void init() { addRenderableWidget(searchBar); addRenderableWidget(helpButton); addRenderableWidget(variantsButton); - addRenderableWidget(skillsButton); + addRenderableWidget(traitsButton); addRenderableWidget(playerButton); if (Walkers.hasSpecialShape(minecraft.player.getUUID())) addRenderableWidget(specialShapeButton); - new Thread(() -> { - populateUnlockedRenderEntities(minecraft.player); - - ShapeType currentShape = ShapeType.from(PlayerShape.getCurrentShape(minecraft.player)); + populateUnlockedRenderEntities(minecraft.player); + + ShapeType currentShape = ShapeType.from(PlayerShape.getCurrentShape(minecraft.player)); + + // handle favorites + unlocked.sort((first, second) -> { + if (Objects.equals(first, currentShape)) { + return -1; + } else if (Objects.equals(second, currentShape)) { + return 1; + } else { + boolean firstIsFav = ((RemorphedPlayerDataProvider) minecraft.player).remorphed$getFavorites().contains(first); + boolean secondIsFav = ((RemorphedPlayerDataProvider) minecraft.player).remorphed$getFavorites().contains(second); + if (firstIsFav == secondIsFav) + return 0; + if (firstIsFav) + return -1; + else return 1; + } + }); - // handle favorites - unlocked.sort((first, second) -> { - if (Objects.equals(first, currentShape)) { - return -1; - } else if (Objects.equals(second, currentShape)) { - return 1; - } else { - boolean firstIsFav = ((RemorphedPlayerDataProvider) minecraft.player).remorphed$getFavorites().contains(first); - boolean secondIsFav = ((RemorphedPlayerDataProvider) minecraft.player).remorphed$getFavorites().contains(second); - if (firstIsFav == secondIsFav) - return 0; - if (firstIsFav) - return -1; - else return 1; - } - }); - - // filter unlocked - if (!Remorphed.displayVariantsInMenu) { - List> newUnlocked = new ArrayList<>(); - for (ShapeType shapeType : unlocked) { - if (shapeType.equals(currentShape) || !newUnlocked.stream().map(ShapeType::getEntityType).toList().contains(shapeType.getEntityType())) { - newUnlocked.add(shapeType); - } + // filter unlocked + if (!Remorphed.displayVariantsInMenu) { + List> newUnlocked = new ArrayList<>(); + for (ShapeType shapeType : unlocked) { + if (shapeType.equals(currentShape) || !newUnlocked.stream().map(ShapeType::getEntityType).toList().contains(shapeType.getEntityType())) { + newUnlocked.add(shapeType); } - - unlocked.clear(); - unlocked.addAll(newUnlocked); } - populateEntityWidgets(unlocked); - }, "cache entities").start(); + unlocked.clear(); + unlocked.addAll(newUnlocked); + } + + populateEntityWidgets(unlocked); // implement search handler searchBar.setResponder(text -> { @@ -132,7 +131,7 @@ public void render(PoseStack context, int mouseX, int mouseY, float delta) { searchBar.render(context, mouseX, mouseY, delta); helpButton.render(context, mouseX, mouseY, delta); variantsButton.render(context, mouseX, mouseY, delta); - skillsButton.render(context, mouseX, mouseY, delta); + traitsButton.render(context, mouseX, mouseY, delta); playerButton.render(context, mouseX, mouseY, delta); if (Walkers.hasSpecialShape(minecraft.player.getUUID())) specialShapeButton.render(context, mouseX, mouseY, delta); @@ -190,7 +189,7 @@ public boolean mouseScrolled(double mouseX, double mouseY, double scrollY) { } @SuppressWarnings("unchecked") - private synchronized void populateEntityWidgets(List> rendered) { + private void populateEntityWidgets(List> rendered) { entityWidgets.clear(); // add widget for each entity to be rendered int x = 15; @@ -222,14 +221,14 @@ private synchronized void populateEntityWidgets(List> rendered) { addRenderableWidget(entityWidget); entityWidgets.add(entityWidget); } else { - Remorphed.LOGGER.error("invalid shape type: " + type.getEntityType().getDescriptionId()); + Remorphed.LOGGER.error("invalid shape type: {}", type.getEntityType().getDescriptionId()); } } } } } - public synchronized void populateUnlockedRenderEntities(Player player) { + public void populateUnlockedRenderEntities(Player player) { unlocked.clear(); renderEntities.clear(); List> validUnlocked = Remorphed.getUnlockedShapes(player); @@ -264,11 +263,11 @@ private Button createVariantsButton() { }); } - private Button createSkillsButton() { + private Button createTraitsButton() { int xOffset = Walkers.hasSpecialShape(Minecraft.getInstance().player.getUUID()) ? 30 : 0; int xPos = (int) (getWindow().getGuiScaledWidth() / 2f + (getWindow().getGuiScaledWidth() / 8f) + 65 + xOffset); - return new Button(xPos, 5, Math.min(50, getWindow().getGuiScaledWidth() - xPos), 20, new TranslatableComponent("remorphed.show_skills"), (widget) -> { - Remorphed.displaySkillsInMenu = !Remorphed.displaySkillsInMenu; + return new Button(xPos, 5, Math.min(50, getWindow().getGuiScaledWidth() - xPos), 20, new TranslatableComponent("remorphed.show_traits"), (widget) -> { + Remorphed.displayTraitsInMenu = !Remorphed.displayTraitsInMenu; }); } @@ -297,7 +296,7 @@ private Window getWindow() { @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { if (mouseY < 35) { - return searchBar.mouseClicked(mouseX, mouseY, button) || helpButton.mouseClicked(mouseX, mouseY, button) || variantsButton.mouseClicked(mouseX, mouseY, button) || skillsButton.mouseClicked(mouseX, mouseY, button) || playerButton.mouseClicked(mouseX, mouseY, button) || specialShapeButton.mouseClicked(mouseX, mouseY, button); + return searchBar.mouseClicked(mouseX, mouseY, button) || helpButton.mouseClicked(mouseX, mouseY, button) || variantsButton.mouseClicked(mouseX, mouseY, button) || traitsButton.mouseClicked(mouseX, mouseY, button) || playerButton.mouseClicked(mouseX, mouseY, button) || specialShapeButton.mouseClicked(mouseX, mouseY, button); } else { return super.mouseClicked(mouseX, mouseY, button); } diff --git a/common/src/main/java/tocraft/remorphed/screen/widget/EntityWidget.java b/common/src/main/java/tocraft/remorphed/screen/widget/EntityWidget.java index af01707..e5bd7aa 100644 --- a/common/src/main/java/tocraft/remorphed/screen/widget/EntityWidget.java +++ b/common/src/main/java/tocraft/remorphed/screen/widget/EntityWidget.java @@ -21,8 +21,9 @@ import tocraft.remorphed.screen.RemorphedScreen; import tocraft.walkers.api.PlayerShape; import tocraft.walkers.api.variant.ShapeType; -import tocraft.walkers.skills.ShapeSkill; -import tocraft.walkers.skills.SkillRegistry; +import tocraft.walkers.traits.ShapeTrait; +import tocraft.walkers.traits.TraitRegistry; + import java.util.ArrayList; import java.util.List; @@ -73,16 +74,16 @@ else if (button == 1) { @Override public void renderButton(PoseStack context, int mouseX, int mouseY, float delta) { if (!crashed) { - if (Remorphed.displaySkillsInMenu) { - // Render Skill Icons first + if (Remorphed.displayTraitsInMenu) { + // Render Trait Icons first int blitOffset = 0; int rowIndex = 0; - List renderedSkills = new ArrayList<>(); - for (ShapeSkill skill : SkillRegistry.getAll(entity)) { - if (skill != null && skill.getIcon() != null && (!renderedSkills.contains(skill.getId()) || skill.iconMightDiffer())) { - RenderSystem.setShaderTexture(0, skill.getIcon().atlas().location()); - GuiComponent.blit(context, x + rowIndex, y + blitOffset, 0, 18, 18, skill.getIcon()); - // prevent infinite skills to be rendered + List renderedTraits = new ArrayList<>(); + for (ShapeTrait trait : TraitRegistry.getAll(entity)) { + if (trait != null && trait.getIcon() != null && (!renderedTraits.contains(trait.getId()) || trait.iconMightDiffer())) { + RenderSystem.setShaderTexture(0, trait.getIcon().atlas().location()); + GuiComponent.blit(context, x + rowIndex, y + blitOffset, 0, 18, 18, trait.getIcon()); + // prevent infinite traits to be rendered if (blitOffset >= getHeight() - 18) { rowIndex += 18; blitOffset = 0; @@ -92,7 +93,7 @@ public void renderButton(PoseStack context, int mouseX, int mouseY, float delta) if (rowIndex >= getWidth() - 18) { break; } - renderedSkills.add(skill.getId()); + renderedTraits.add(trait.getId()); } } } @@ -103,7 +104,7 @@ public void renderButton(PoseStack context, int mouseX, int mouseY, float delta) // ARGH InventoryScreen.renderEntityInInventory(x + this.getWidth() / 2, (int) (y + this.getHeight() * .75f), size, -10, -10, entity); } catch (Exception e) { - Remorphed.LOGGER.error("Error while rendering " + ShapeType.createTooltipText(entity).getString(), e); + Remorphed.LOGGER.error("Error while rendering {}", ShapeType.createTooltipText(entity).getString(), e); crashed = true; MultiBufferSource.BufferSource immediate = Minecraft.getInstance().renderBuffers().bufferSource(); immediate.endBatch(); diff --git a/common/src/main/java/tocraft/remorphed/tick/KeyPressHandler.java b/common/src/main/java/tocraft/remorphed/tick/KeyPressHandler.java index 833af76..c87ae04 100644 --- a/common/src/main/java/tocraft/remorphed/tick/KeyPressHandler.java +++ b/common/src/main/java/tocraft/remorphed/tick/KeyPressHandler.java @@ -1,14 +1,14 @@ package tocraft.remorphed.tick; -import dev.architectury.event.events.client.ClientTickEvent; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.Minecraft; +import tocraft.craftedcore.event.client.ClientTickEvents; import tocraft.remorphed.RemorphedClient; import tocraft.remorphed.screen.RemorphedScreen; @Environment(EnvType.CLIENT) -public class KeyPressHandler implements ClientTickEvent.Client { +public class KeyPressHandler implements ClientTickEvents.Client { @Override public void tick(Minecraft client) { assert client.player != null; diff --git a/common/src/main/resources/assets/remorphed/lang/de_de.json b/common/src/main/resources/assets/remorphed/lang/de_de.json index 7c59860..899e43d 100644 --- a/common/src/main/resources/assets/remorphed/lang/de_de.json +++ b/common/src/main/resources/assets/remorphed/lang/de_de.json @@ -2,7 +2,7 @@ "key.categories.remorphed": "Remorphed", "key.remorphed_menu": "Öffne das Auswahlmenü", "remorphed.display_variants": "Zeige Varianten", - "remorphed.show_skills": "Skills", + "remorphed.show_traits": "Traits", "remorphed.help": "Öffne Woodremorphed Menü", "remorphed.help.welcome": "Willkommen zu Remorphed, einer Variante von Morph/Identity, geschrieben von To_Craft.", "remorphed.help.credits": "Vielen Dank an alle Unterstützer dieses Projekts!", @@ -24,7 +24,7 @@ "remorphed.addShape": "%s hat %s freigeschaltet.", "remorphed.clearShapes": "Löschte alle freigeschalteten Gestalten von %s.", "remorphed.variants": "Zeige Mob Varianten", - "remorphed.skills": "Display Skills", + "remorphed.traits": "Zeige Traits", "remorphed.player_icon": "Verwandle dich wieder in einen Spieler", "remorphed.special_shape_available": "Gratulation zu deinem Special Shape!", "remorphed.special_shape_unavailable": "Schalte zuerst einen Wolf frei" diff --git a/common/src/main/resources/assets/remorphed/lang/en_us.json b/common/src/main/resources/assets/remorphed/lang/en_us.json index c6ead95..d49573d 100644 --- a/common/src/main/resources/assets/remorphed/lang/en_us.json +++ b/common/src/main/resources/assets/remorphed/lang/en_us.json @@ -2,7 +2,7 @@ "key.categories.remorphed": "Remorphed", "key.remorphed_menu": "Open menu to choose second shape", "remorphed.display_variants": "Display Variants", - "remorphed.show_skills": "Skills", + "remorphed.show_traits": "Traits", "remorphed.help": "Open Remorphed help menu", "remorphed.help.welcome": "Welcome to Remorphed, based on Identity by Draylar, written by To_Craft.", "remorphed.help.credits": "Thank you to Supporters of this project!", @@ -24,7 +24,7 @@ "remorphed.addShape": "%s unlocked %s.", "remorphed.clearShapes": "Cleared all unlocked Shapes from %s.", "remorphed.variants": "Show mob variants", - "remorphed.skills": "Display Skills", + "remorphed.traits": "Display Traits", "remorphed.player_icon": "Transform back into a player", "remorphed.special_shape_available": "Congratulations on your special shape!", "remorphed.special_shape_unavailable": "Unlock a wolf first" diff --git a/common/src/main/resources/icon.png b/common/src/main/resources/icon.png new file mode 100644 index 0000000..ef31c9b Binary files /dev/null and b/common/src/main/resources/icon.png differ diff --git a/common/src/main/resources/remorphed.mixins.json b/common/src/main/resources/remorphed.mixins.json index 3367f04..e8d165c 100644 --- a/common/src/main/resources/remorphed.mixins.json +++ b/common/src/main/resources/remorphed.mixins.json @@ -4,14 +4,11 @@ "package": "tocraft.remorphed.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "LivingEntityMixin", "PlayerEntityMixin", "PlayerListMixin", - "ServerEntityMixin", - "ServerPlayerEntityMixin" + "ServerEntityMixin" ], "client": [ - "ClientPlayerDataCacheMixin", "accessor.ScreenAccessor" ], "injectors": { diff --git a/fabric/build.gradle b/fabric/build.gradle index 52ee712..03dfeee 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -1,7 +1,6 @@ apply from: "https://raw.githubusercontent.com/ToCraft/GradleMaster/main/fabric.gradle" dependencies { - modApi "dev.architectury:architectury-fabric:${rootProject.architectury_version}" modApi "dev.tocraft:craftedcore-fabric:${rootProject.minecraft_version}-${rootProject.craftedcore_version}" modApi "dev.tocraft:walkers-fabric:${rootProject.minecraft_version}-${rootProject.woodwalkers_version}" } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index f4ee53b..7ef2753 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -3,12 +3,17 @@ "id": "remorphed", "version": "${version}", "name": "ReMorphed", + "icon": "icon.png", "description": "Play as your favorite entities!", "authors": [ "To_Craft" ], "contributors": [ ], + "contact": { + "issues": "https://github.com/ToCraft/Remorphed/issues", + "sources": "https://github.com/ToCraft/Remorphed" + }, "license": "MIT", "environment": "*", "entrypoints": { @@ -27,7 +32,6 @@ "fabric": "*", "fabric-api": "*", "craftedcore": ">=${craftedcore_version}", - "walkers": ">=${woodwalkers_version}", - "architectury": ">=${architectury_version}" + "walkers": ">=${woodwalkers_version}" } } diff --git a/forge/build.gradle b/forge/build.gradle index 3fd6eda..ca8a6e7 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -7,7 +7,6 @@ loom { } dependencies { - modApi "dev.architectury:architectury-forge:${rootProject.architectury_version}" modApi "dev.tocraft:craftedcore-forge:${rootProject.minecraft_version}-${rootProject.craftedcore_version}" modApi "dev.tocraft:walkers-forge:${rootProject.minecraft_version}-${rootProject.woodwalkers_version}" } diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 6439085..5184a85 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -1,6 +1,7 @@ modLoader = "javafml" loaderVersion = "[40,)" -#issueTrackerURL = "" +issueTrackerURL = "https://github.com/ToCraft/Remorphed/issues" +displayURL = "https://github.com/ToCraft/Remorphed" license = "LGPLv3" [[mods]] @@ -8,10 +9,11 @@ modId = "remorphed" version = "${version}" displayName = "ReMorphed" authors = "To_Craft" +credits = "Original mod by Draylar" description = ''' Transform like in the old-school morph mod! ''' -#logoFile = "" +logoFile = "icon.png" [[dependencies.remorphed]] modId = "forge" @@ -40,10 +42,3 @@ mandatory = true versionRange = "[${woodwalkers_version},)" ordering = "AFTER" side = "BOTH" - -[[dependencies.remorphed]] -modId = "architectury" -mandatory = true -versionRange = "[${architectury_version},)" -ordering = "AFTER" -side = "BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 630640b..1ec12e6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ minecraft_version=1.18.2 supported_versions=1.18.2 archives_base_name=remorphed artifact_type=release -mod_version=3.6.1 +mod_version=3.6.2 maven_group=dev.tocraft # Loader Versions fabric_loader_version=0.14.25 @@ -12,13 +12,13 @@ fabric_api_version=0.77.0 parchmentmc_mappings=2022.11.06 forge_version=40.2.17 # Dependency Versions -architectury_version=4.11.93 -craftedcore_version=3.2.4 -woodwalkers_version=4.2 +craftedcore_version=4.2 +woodwalkers_version=4.4.3 # Upload data curseforge_id=950721 modrinth_id=8aeV5uJW -required_dependencies=woodwalkers,crafted-core,architectury-api +required_dependencies=woodwalkers,crafted-core optional_dependencies= # Platforms enabled_platforms=fabric,forge +java_version=17 \ No newline at end of file