Skip to content

Commit

Permalink
Merge branch '1.20.1' into 1.19.4
Browse files Browse the repository at this point in the history
  • Loading branch information
ToCraft committed Jun 5, 2024
2 parents 87d1249 + b223567 commit f1a54be
Show file tree
Hide file tree
Showing 18 changed files with 175 additions and 96 deletions.
42 changes: 39 additions & 3 deletions .github/workflows/push_build_and_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ on:
inputs:
release:
description: 'Release'
required: true
required: false
default: 'true'
discord_message:
description: 'Discord Message'
required: false
default: 'false'

permissions:
Expand Down Expand Up @@ -54,12 +58,13 @@ jobs:
!**/*-dev.jar
!**/*-shadow.jar
!**/*-transformProduction*.jar
!**/testmod*/
release:
name: "Release"
needs: build
runs-on: ubuntu-latest
if: |
!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[release]') && github.event.inputs.release == 'true'
!contains(github.event.head_commit.message, '[no_release]') && github.event.inputs.release != 'false'
steps:
- uses: actions/checkout@v4

Expand All @@ -74,6 +79,10 @@ jobs:
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3

- name: Extract Artifact Type
run: |
cat $GITHUB_WORKSPACE/gradle.properties | grep ^artifact_type= >> $GITHUB_ENV
- name: Publish to Maven, CurseForge & Modrinth
run: ./gradlew publish modrinth curseforge --no-daemon
env:
Expand All @@ -91,15 +100,42 @@ jobs:
- name: Create version name
run: echo "version_name_git=$minecraft_version-$mod_version" >> $GITHUB_ENV
- name: Create GitHub Tag
if: |
${{ env.artifact_type }} == 'release'
uses: EndBug/latest-tag@latest
with:
ref: "${{ env.version_name_git }}"
- name: Create GitHub Release
if: |
${{ env.artifact_type }} == 'release'
uses: softprops/action-gh-release@v2
with:
tag_name: "${{ env.version_name_git }}"
files: |
fabric/build/libs/${{ env.archives_base_name }}-${{ env.mod_version }}-fabric.jar,
forge/build/libs/${{ env.archives_base_name }}-${{ env.mod_version }}-forge.jar,
neoforge/build/libs/${{ env.archives_base_name }}-${{ env.mod_version }}-neoforge.jar
body_path: ${{ github.workspace }}/extracted.CHANGELOG.md
body_path: ${{ github.workspace }}/extracted.CHANGELOG.md
discord_message:
name: "Send Discord Release Message"
needs: build
runs-on: ubuntu-latest
if: |
github.event.inputs.discord_message == 'true'
steps:
- uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 21
distribution: 'temurin'
- name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v3

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Send Discord Message
run: ./gradlew discordRelease --no-daemon
env:
DISCORD_WEB_HOOK: ${{ secrets.DISCORD_WEB_HOOK }}
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,45 @@
remorphed 3.6.3
================

- fix crash when morphing back and unlockFriendlyNormal is true
- use new walkers API Levels & use PlayerMorph.class

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

remorphed 3.6
================

- selected entity is rendered first
- add compatibility for walkers 4.2 (and variants menu)
- skills can renderer multiple times per entity if required (e.g. the MobEffectSkill can render multiple icons now)

remorphed 3.5
================

- change entity orientation in menu
- fix sync error
- fix render scissor (no more entities in the menu)
- some skills render the icon (toggleable)

remorphed 3.4
================

- fix crash on startup for 1.20.2+
- player data will be properly restored on death now (required re-login before)
- fix only craftedcore 3.0 possible on Fabric

remorphed 3.3
================

- menu loads entities in the background
- menu only renders visible entities (fixes low FPS in the menu)
- fix every entity available in survival
Expand Down
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ apply from: "https://raw.githubusercontent.com/ToCraft/GradleMaster/main/main.gr

ext {
mod_meta = [
minecraft_version : minecraft_version, version: version,
craftedcore_version : craftedcore_version,
woodwalkers_version : woodwalkers_version
minecraft_version : minecraft_version, version: version,
craftedcore_version: craftedcore_version,
woodwalkers_version: woodwalkers_version
]
}
21 changes: 11 additions & 10 deletions common/src/main/java/tocraft/remorphed/Remorphed.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package tocraft.remorphed;

import io.netty.buffer.Unpooled;
import net.fabricmc.api.EnvType;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
Expand All @@ -22,13 +20,14 @@
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.handler.ShapeEventsCallback;
import tocraft.remorphed.impl.PlayerMorph;
import tocraft.remorphed.network.NetworkHandler;
import tocraft.walkers.Walkers;
import tocraft.walkers.api.events.ShapeEvents;
import tocraft.walkers.api.platform.ApiLevel;
import tocraft.walkers.api.variant.ShapeType;

import java.util.ArrayList;
Expand All @@ -45,6 +44,11 @@ public class Remorphed {
public static boolean displayTraitsInMenu = true;

public void initialize() {
ShapeEvents.UNLOCK_SHAPE.register(new ShapeEventsCallback());
if (!CONFIG.unlockFriendlyNormal) {
ApiLevel.setApiLevel(ApiLevel.MORPHING_AND_VARIANTS_MENU_ONLY);
}

// add DarkShadow_2k to devs (for creating the special shape icon and concepts)
Walkers.devs.add(UUID.fromString("74b6d9b3-c8c1-40db-ab82-ccc290d1aa03"));

Expand All @@ -54,8 +58,6 @@ public void 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))));
CommandEvents.REGISTRATION.register(new RemorphedCommand());
EntityEvents.LIVING_DEATH.register(new LivingDeathHandler());
PlayerEvents.PLAYER_RESPAWN.register(new PlayerRespawnHandler());
Expand All @@ -73,7 +75,7 @@ public static boolean canUseEveryShape(Player player) {
}

public static boolean canUseShape(Player player, ShapeType<?> type) {
return canUseEveryShape(player) || !Remorphed.CONFIG.lockTransform && (type == null || Remorphed.getKillToUnlock(type.getEntityType()) <= 0 || ((RemorphedPlayerDataProvider) player).remorphed$getKills(type) >= Remorphed.getKillToUnlock(type.getEntityType()));
return canUseEveryShape(player) || !Remorphed.CONFIG.lockTransform && (type == null || Remorphed.getKillToUnlock(type.getEntityType()) <= 0 || PlayerMorph.getKills(player, type) >= Remorphed.getKillToUnlock(type.getEntityType()));
}

public static List<ShapeType<?>> getUnlockedShapes(Player player) {
Expand All @@ -86,7 +88,7 @@ public static List<ShapeType<?>> getUnlockedShapes(Player player) {
}
return unlocked;
} else {
return new ArrayList<>(((RemorphedPlayerDataProvider) player).remorphed$getUnlockedShapes().keySet().stream().filter(type -> canUseShape(player, type)).toList());
return new ArrayList<>(PlayerMorph.getUnlockedShapes(player).keySet().stream().filter(type -> canUseShape(player, type)).toList());
}
}

Expand All @@ -101,11 +103,10 @@ public static void sync(ServerPlayer player) {
}

public static void sync(ServerPlayer changed, ServerPlayer packetTarget) {
FriendlyByteBuf packet = new FriendlyByteBuf(Unpooled.buffer());
CompoundTag compoundTag = new CompoundTag();

// serialize current shape data to tag if it exists
Map<ShapeType<?>, Integer> unlockedShapes = ((RemorphedPlayerDataProvider) changed).remorphed$getUnlockedShapes();
Map<ShapeType<?>, Integer> unlockedShapes = PlayerMorph.getUnlockedShapes(changed);

ListTag list = new ListTag();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.jetbrains.annotations.Nullable;
import tocraft.craftedcore.event.common.CommandEvents;
import tocraft.remorphed.Remorphed;
import tocraft.remorphed.impl.RemorphedPlayerDataProvider;
import tocraft.remorphed.impl.PlayerMorph;
import tocraft.walkers.api.PlayerShapeChanger;
import tocraft.walkers.api.variant.ShapeType;

Expand All @@ -32,7 +32,7 @@ private static int hasShape(CommandSourceStack source, ServerPlayer player, Reso
ShapeType<LivingEntity> type = getType(source.getLevel(), id, nbt);
Component name = Component.translatable(type.getEntityType().getDescriptionId());

if (((RemorphedPlayerDataProvider) player).remorphed$getUnlockedShapes().containsKey(type)) {
if (PlayerMorph.getUnlockedShapes(player).containsKey(type)) {
source.sendSystemMessage(Component.translatable(Remorphed.MODID + ".hasShape_success",
player.getDisplayName(), name));

Expand All @@ -47,7 +47,7 @@ private static void removeShape(CommandSourceStack source, ServerPlayer player,
ShapeType<LivingEntity> type = getType(source.getLevel(), id, nbt);
Component name = Component.translatable(type.getEntityType().getDescriptionId());

((RemorphedPlayerDataProvider) player).remorphed$getUnlockedShapes().remove(type);
PlayerMorph.getUnlockedShapes(player).remove(type);

source.sendSystemMessage(Component.translatable(Remorphed.MODID + ".removeShape", name, player.getDisplayName()));
}
Expand All @@ -56,13 +56,13 @@ private static void addShape(CommandSourceStack source, ServerPlayer player, Res
ShapeType<LivingEntity> type = getType(source.getLevel(), id, nbt);
Component name = Component.translatable(type.getEntityType().getDescriptionId());

((RemorphedPlayerDataProvider) player).remorphed$getUnlockedShapes().put(type, Remorphed.getKillToUnlock(type.getEntityType()));
PlayerMorph.getUnlockedShapes(player).put(type, Remorphed.getKillToUnlock(type.getEntityType()));

source.sendSystemMessage(Component.translatable(Remorphed.MODID + ".addShape", player.getDisplayName(), name));
}

private static void clearShapes(CommandSourceStack source, ServerPlayer player) {
((RemorphedPlayerDataProvider) player).remorphed$getUnlockedShapes().clear();
PlayerMorph.getUnlockedShapes(player).clear();

source.sendSystemMessage(Component.translatable(Remorphed.MODID + ".clearShapes", player.getDisplayName()));
PlayerShapeChanger.change2ndShape(player, null);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import net.minecraft.world.entity.player.Player;
import tocraft.craftedcore.event.common.EntityEvents;
import tocraft.remorphed.Remorphed;
import tocraft.remorphed.impl.RemorphedPlayerDataProvider;
import tocraft.remorphed.impl.PlayerMorph;
import tocraft.walkers.api.PlayerShape;
import tocraft.walkers.api.PlayerShapeChanger;
import tocraft.walkers.api.variant.ShapeType;
Expand All @@ -18,9 +18,9 @@ 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);
PlayerMorph.addKill(killer, type);

if (Remorphed.CONFIG.autoTransform && ((RemorphedPlayerDataProvider) killer).remorphed$getKills(type) >= Remorphed.getKillToUnlock(type.getEntityType())) {
if (Remorphed.CONFIG.autoTransform && PlayerMorph.getKills(killer, type) >= Remorphed.getKillToUnlock(type.getEntityType())) {
PlayerShapeChanger.change2ndShape(killer, type);
PlayerShape.updateShapes(killer, type.create(killer.level));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
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;
import tocraft.remorphed.impl.PlayerMorph;

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());
PlayerMorph.getUnlockedShapes(newPlayer).clear();
PlayerMorph.getUnlockedShapes(newPlayer).putAll(PlayerMorph.getUnlockedShapes(oldPlayer));
PlayerMorph.getFavorites(newPlayer).clear();
PlayerMorph.getFavorites(newPlayer).addAll(PlayerMorph.getFavorites(oldPlayer));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package tocraft.remorphed.handler;

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;
import tocraft.remorphed.Remorphed;
import tocraft.remorphed.impl.PlayerMorph;
import tocraft.walkers.Walkers;
import tocraft.walkers.api.events.ShapeEvents;
import tocraft.walkers.api.variant.ShapeType;

public class ShapeEventsCallback implements ShapeEvents.UnlockShapeCallback {
@Override
public InteractionResult unlock(ServerPlayer player, ShapeType<?> type) {
if (type != null) {
// check if the walkers unlock mechanic should be used
if (!Remorphed.CONFIG.lockTransform && Remorphed.CONFIG.unlockFriendlyNormal) {
LivingEntity entityToBeUnlocked = type.create(player.level);
if (!(entityToBeUnlocked instanceof Enemy)) {
PlayerMorph.getUnlockedShapes(player).put(type, Remorphed.getKillToUnlock(type.getEntityType()));
}
}
// check if entity is unlocked by remorphed, prevents native unlock mechanic by walkers
else if (!Remorphed.canUseShape(player, type)) {
if (!type.getEntityType().equals(EntityType.WOLF) || !Walkers.hasSpecialShape(player.getUUID())) {
return InteractionResult.FAIL;
}
}
}

return InteractionResult.PASS;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

import net.minecraft.client.player.LocalPlayer;
import tocraft.craftedcore.event.client.ClientPlayerEvents;
import tocraft.remorphed.impl.RemorphedPlayerDataProvider;
import tocraft.remorphed.impl.PlayerMorph;

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());
PlayerMorph.getUnlockedShapes(newPlayer).clear();
PlayerMorph.getUnlockedShapes(newPlayer).putAll(PlayerMorph.getUnlockedShapes(oldPlayer));
PlayerMorph.getFavorites(newPlayer).clear();
PlayerMorph.getFavorites(newPlayer).addAll(PlayerMorph.getFavorites(oldPlayer));
}
}
Loading

0 comments on commit f1a54be

Please sign in to comment.