Skip to content

Commit

Permalink
Merge branch '1.20.2' into 1.20.1
Browse files Browse the repository at this point in the history
  • Loading branch information
ToCraft committed Mar 23, 2024
2 parents 4f4c66f + ccce68c commit dd63764
Show file tree
Hide file tree
Showing 12 changed files with 119 additions and 29 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
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+
Expand Down
2 changes: 1 addition & 1 deletion common/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ apply from: "https://raw.githubusercontent.com/ToCraft/GradleMaster/main/common.
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.craftedcore_version}"
modApi "dev.tocraft:walkers:${rootProject.minecraft_version}-${rootProject.woodwalkers_version}"
}
9 changes: 2 additions & 7 deletions common/src/main/java/tocraft/remorphed/Remorphed.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@
import tocraft.walkers.api.event.ShapeEvents;
import tocraft.walkers.api.variant.ShapeType;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
Expand All @@ -41,17 +39,14 @@ public class Remorphed {
public static final Logger LOGGER = LoggerFactory.getLogger(Remorphed.class);
public static final String MODID = "remorphed";
public static final RemorphedConfig CONFIG = ConfigLoader.read(MODID, RemorphedConfig.class);
private static final String MAVEN_URL = "https://maven.tocraft.dev/public/dev/tocraft/remorphed/maven-metadata.xml";
public static boolean displayVariantsInMenu = true;
public static boolean displaySkillsInMenu = 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"));

try {
VersionChecker.registerMavenChecker(MODID, new URL(MAVEN_URL), Component.literal("Remorphed"));
} catch (MalformedURLException ignored) {
}
VersionChecker.registerDefaultGitHubChecker(MODID, "ToCraft", "Remorphed", Component.literal("Remorphed"));

if (Platform.getEnvironment() == Env.CLIENT) new RemorphedClient().initialize();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package tocraft.remorphed.mixin;

import net.minecraft.server.level.ServerEntity;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Entity;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import tocraft.walkers.api.PlayerShape;

@Mixin(ServerEntity.class)
public class ServerEntityMixin {

@Shadow
@Final
private Entity entity;

@Inject(method = "addPairing", at = @At("RETURN"))
private void sendPairingWalkersPackets(ServerPlayer newlyTracked, CallbackInfo ci) {
if (this.entity instanceof ServerPlayer player) {
PlayerShape.sync(newlyTracked, player);
PlayerShape.sync(player, newlyTracked);
}
}
}
38 changes: 31 additions & 7 deletions common/src/main/java/tocraft/remorphed/screen/RemorphedScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,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 PlayerWidget playerButton = createPlayerButton();
private final SpecialShapeWidget specialShapeButton = createSpecialShapeButton();
private String lastSearchContents = "";
Expand All @@ -49,7 +50,10 @@ public class RemorphedScreen extends Screen {
public RemorphedScreen() {
super(Component.literal(""));
super.init(Minecraft.getInstance(), Minecraft.getInstance().getWindow().getGuiScaledWidth(), Minecraft.getInstance().getWindow().getGuiScaledHeight());
}

@Override
public void init() {
// don't initialize if the player is null
if (minecraft == null) return;
if (minecraft.player == null) {
Expand All @@ -60,22 +64,29 @@ public RemorphedScreen() {
addRenderableWidget(searchBar);
addRenderableWidget(helpButton);
addRenderableWidget(variantsButton);
addRenderableWidget(skillsButton);
addRenderableWidget(playerButton);
if (Walkers.hasSpecialShape(minecraft.player.getUUID()))
addRenderableWidget(specialShapeButton);

populateUnlocked = new Thread(() -> {
populateUnlockedRenderEntities(minecraft.player);

ShapeType<? extends LivingEntity> currentShape = ShapeType.from(PlayerShape.getCurrentShape(minecraft.player));

// handle favorites
unlocked.sort((first, second) -> {
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)
if (first.equals(currentShape)) {
return -1;
else 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
Expand Down Expand Up @@ -128,6 +139,7 @@ public void render(GuiGraphics 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);
playerButton.render(context, mouseX, mouseY, delta);
if (Walkers.hasSpecialShape(minecraft.player.getUUID()))
specialShapeButton.render(context, mouseX, mouseY, delta);
Expand Down Expand Up @@ -260,6 +272,18 @@ private Button createVariantsButton() {
return variantsButton.build();
}

private Button createSkillsButton() {
Button.Builder skillButton = Button.builder(Component.translatable("remorphed.show_skills"), (widget) -> Remorphed.displaySkillsInMenu = !Remorphed.displaySkillsInMenu);
int xOffset = Walkers.hasSpecialShape(Minecraft.getInstance().player.getUUID()) ? 30 : 0;

int xPos = (int) (getWindow().getGuiScaledWidth() / 2f + (getWindow().getGuiScaledWidth() / 8f) + 65 + xOffset);
skillButton.pos(xPos, 5);
skillButton.size(Math.min(50, getWindow().getGuiScaledWidth() - xPos), 20);
skillButton.tooltip(Tooltip.create(Component.translatable(Remorphed.MODID + ".skills")));

return skillButton.build();
}

private PlayerWidget createPlayerButton() {
return new PlayerWidget(
(int) (getWindow().getGuiScaledWidth() / 2f + (getWindow().getGuiScaledWidth() / 8f) + 5),
Expand All @@ -285,7 +309,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) || 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) || skillsButton.mouseClicked(mouseX, mouseY, button) || playerButton.mouseClicked(mouseX, mouseY, button) || specialShapeButton.mouseClicked(mouseX, mouseY, button);
} else {
return super.mouseClicked(mouseX, mouseY, button);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,20 @@
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.LivingEntity;
import org.joml.Quaternionf;
import org.joml.Vector3f;
import tocraft.remorphed.Remorphed;
import tocraft.remorphed.network.NetworkHandler;
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 java.util.ArrayList;
import java.util.List;

@Environment(EnvType.CLIENT)
public class EntityWidget<T extends LivingEntity> extends AbstractButton {
Expand All @@ -40,7 +48,7 @@ public EntityWidget(float x, float y, float width, float height, ShapeType<T> ty
this.parent = parent;
this.isFavorite = isFavorite;
this.isCurrent = current;
setTooltip(Tooltip.create(type.createTooltipText(entity)));
setTooltip(Tooltip.create(ShapeType.createTooltipText(entity)));
}

@Override
Expand All @@ -67,13 +75,36 @@ else if (button == 1) {
@Override
public void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delta) {
if (!crashed) {
if (Remorphed.displaySkillsInMenu) {
// Render Skill Icons first
int blitOffset = 0;
int rowIndex = 0;
List<ResourceLocation> renderedSkills = new ArrayList<>();
for (ShapeSkill<T> skill : SkillRegistry.getAll(entity)) {
if (!renderedSkills.contains(skill.getId()) && skill.getIcon() != null) {
context.blit(getX() + rowIndex, getY() + blitOffset, 0, 18, 18, skill.getIcon());
// prevent infinite skills to be rendered
if (blitOffset >= getHeight() - 18) {
rowIndex += 18;
blitOffset = 0;
} else {
blitOffset += 18;
}
if (rowIndex >= getWidth() - 18) {
break;
}
renderedSkills.add(skill.getId());
}
}
}

// Some entities (namely Aether mobs) crash when rendered in a GUI.
// Unsure as to the cause, but this try/catch should prevent the game from entirely dipping out.
try {
// ARGH
InventoryScreen.renderEntityInInventoryFollowsMouse(context, this.getX() + this.getWidth() / 2, (int) (this.getY() + this.getHeight() * .75f), size, -10, -10, entity);
InventoryScreen.renderEntityInInventory(context, getX() + this.getWidth() / 2, (int) (getY() + this.getHeight() * .75f), size, new Quaternionf().rotationXYZ((float) Math.PI, 0, 0), new Quaternionf().rotationXYZ(0.43633232F, (float) Math.PI, (float) Math.PI), entity);
} catch (Exception e) {
Remorphed.LOGGER.error("Error while rendering " + type.getEntityType().getDescriptionId(), e);
Remorphed.LOGGER.error("Error while rendering " + ShapeType.createTooltipText(entity).getString(), e);
crashed = true;
MultiBufferSource.BufferSource immediate = Minecraft.getInstance().renderBuffers().bufferSource();
immediate.endBatch();
Expand Down
8 changes: 5 additions & 3 deletions common/src/main/resources/assets/remorphed/lang/de_de.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"key.categories.remorphed": "Remorphed",
"key.remorphed_menu": "Öffne das Auswahlmenü",
"remorphed.display_variants": "Zeige Varianten",
"remorphed.show_skills": "Skills",
"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!",
Expand All @@ -22,8 +23,9 @@
"remorphed.removeShape": "Entfernte die %s-Gestlat von %s.",
"remorphed.addShape": "%s hat %s freigeschaltet.",
"remorphed.clearShapes": "Löschte alle freigeschalteten Gestalten von %s.",
"remorphed.variants": "Zeige Mob Varianten.",
"remorphed.player_icon": "Verwandle dich wieder in einen Spieler.",
"remorphed.variants": "Zeige Mob Varianten",
"remorphed.skills": "Display Skills",
"remorphed.player_icon": "Verwandle dich wieder in einen Spieler",
"remorphed.special_shape_available": "Gratulation zu deinem Special Shape!",
"remorphed.special_shape_unavailable": "Bitte schalte zuerst einen Wolf frei."
"remorphed.special_shape_unavailable": "Schalte zuerst einen Wolf frei"
}
8 changes: 5 additions & 3 deletions common/src/main/resources/assets/remorphed/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +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.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!",
Expand All @@ -22,8 +23,9 @@
"remorphed.removeShape": "Removed the %s-shape from %s.",
"remorphed.addShape": "%s unlocked %s.",
"remorphed.clearShapes": "Cleared all unlocked Shapes from %s.",
"remorphed.variants": "Show mob variants.",
"remorphed.player_icon": "Transform back into a player.",
"remorphed.variants": "Show mob variants",
"remorphed.skills": "Display Skills",
"remorphed.player_icon": "Transform back into a player",
"remorphed.special_shape_available": "Congratulations on your special shape!",
"remorphed.special_shape_unavailable": "Please unlock a wolf first."
"remorphed.special_shape_unavailable": "Unlock a wolf first"
}
1 change: 1 addition & 0 deletions common/src/main/resources/remorphed.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"LivingEntityMixin",
"PlayerEntityMixin",
"PlayerListMixin",
"ServerEntityMixin",
"ServerPlayerEntityMixin"
],
"client": [
Expand Down
2 changes: 1 addition & 1 deletion fabric/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ apply from: "https://raw.githubusercontent.com/ToCraft/GradleMaster/main/fabric.
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.craftedcore_version}"
modApi "dev.tocraft:walkers-fabric:${rootProject.minecraft_version}-${rootProject.woodwalkers_version}"
}
2 changes: 1 addition & 1 deletion forge/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ 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.craftedcore_version}"
modApi "dev.tocraft:walkers-forge:${rootProject.minecraft_version}-${rootProject.woodwalkers_version}"
}
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ minecraft_version=1.20.1
supported_versions=1.20.1
archives_base_name=remorphed
artifact_type=release
mod_version=3.4
mod_version=3.5
maven_group=dev.tocraft
# Loader Versions
fabric_loader_version=0.14.25
Expand All @@ -13,8 +13,8 @@ parchmentmc_mappings=2023.09.03
forge_version=47.2.0
# Dependency Versions
architectury_version=9.1.12
craftedcore_version=3.0
woodwalkers_version=3.0
craftedcore_version=3.2.3
woodwalkers_version=4.1
# Upload data
curseforge_id=950721
modrinth_id=8aeV5uJW
Expand Down

0 comments on commit dd63764

Please sign in to comment.