Implement M&M support for shrine choices
This commit is contained in:
@@ -99,6 +99,8 @@ minecraft {
|
||||
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
// Put repositories for dependencies here
|
||||
// ForgeGradle automatically adds the Forge maven and Maven Central for you
|
||||
|
||||
@@ -133,6 +135,8 @@ repositories {
|
||||
dependencies {
|
||||
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
|
||||
|
||||
implementation fg.deobf("net.fretux.mindmotion:mindmotion:1.1.0")
|
||||
|
||||
// Iron's Spellbooks API only
|
||||
compileOnly fg.deobf("io.redspace.ironsspellbooks:irons_spellbooks:${irons_spells_version}:api")
|
||||
implementation fg.deobf("io.redspace.ironsspellbooks:irons_spellbooks:${irons_spells_version}")
|
||||
|
||||
+1
-1
@@ -53,7 +53,7 @@ mod_name=Ascend: SbA
|
||||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||
mod_license=All Rights Reserved
|
||||
# The mod version. See https://semver.org/
|
||||
mod_version=1.1.0
|
||||
mod_version=1.2.0
|
||||
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
||||
# This should match the base package used for the mod sources.
|
||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||
|
||||
@@ -13,7 +13,7 @@ import net.minecraft.network.chat.Component;
|
||||
public class ShrineScreen extends Screen {
|
||||
|
||||
private static final int WIDTH = 260;
|
||||
private static final int HEIGHT = 160;
|
||||
private static final int HEIGHT = 200;
|
||||
|
||||
private int leftPos;
|
||||
private int topPos;
|
||||
@@ -74,17 +74,31 @@ public class ShrineScreen extends Screen {
|
||||
addRenderableWidget(leaveButton);
|
||||
}
|
||||
|
||||
case 2 -> { // Player picks what to unmake
|
||||
case 2 -> {
|
||||
// Existing Ascend option
|
||||
Button forgetButton = Button.builder(Component.literal("I WISH TO FORGET."), (btn) -> {
|
||||
PacketHandler.INSTANCE.sendToServer(new ServerboundShrineChoicePacket("forget"));
|
||||
Minecraft.getInstance().setScreen(null);
|
||||
}).bounds(leftPos + 20, buttonY, WIDTH - 40, 20).build();
|
||||
|
||||
addRenderableWidget(forgetButton);
|
||||
int y = buttonY + 25;
|
||||
if (net.fretux.ascend.compat.AscendMMCompat.isMindMotionPresent()) {
|
||||
Button understandButton = Button.builder(Component.literal("I WISH TO UNDERSTAND."), (btn) -> {
|
||||
PacketHandler.INSTANCE.sendToServer(new ServerboundShrineChoicePacket("understand"));
|
||||
Minecraft.getInstance().setScreen(null);
|
||||
}).bounds(leftPos + 20, y, WIDTH - 40, 20).build();
|
||||
addRenderableWidget(understandButton);
|
||||
y += 25;
|
||||
Button restButton = Button.builder(Component.literal("I WISH TO REST."), (btn) -> {
|
||||
PacketHandler.INSTANCE.sendToServer(new ServerboundShrineChoicePacket("rest"));
|
||||
Minecraft.getInstance().setScreen(null);
|
||||
}).bounds(leftPos + 20, y, WIDTH - 40, 20).build();
|
||||
addRenderableWidget(restButton);
|
||||
y += 25;
|
||||
}
|
||||
Button leaveButton = Button.builder(Component.literal("LEAVE."), (btn) -> {
|
||||
Minecraft.getInstance().setScreen(null);
|
||||
}).bounds(leftPos + 20, buttonY + 25, WIDTH - 40, 20).build();
|
||||
|
||||
addRenderableWidget(forgetButton);
|
||||
}).bounds(leftPos + 20, y, WIDTH - 40, 20).build();
|
||||
addRenderableWidget(leaveButton);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package net.fretux.ascend.compat;
|
||||
|
||||
import net.minecraftforge.fml.ModList;
|
||||
|
||||
public class AscendMMCompat {
|
||||
public static boolean isMindMotionPresent() {
|
||||
return ModList.get().isLoaded("mindmotion");
|
||||
}
|
||||
}
|
||||
@@ -4,11 +4,8 @@ import net.fretux.ascend.player.PlayerStatsProvider;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.damagesource.DamageTypes;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
import net.minecraftforge.network.PacketDistributor;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@@ -33,19 +30,63 @@ public class ServerboundShrineChoicePacket {
|
||||
if (player == null) return;
|
||||
|
||||
player.getCapability(PlayerStatsProvider.PLAYER_STATS).ifPresent(stats -> {
|
||||
if ("forget".equals(choice)) {
|
||||
if (stats.getKnowledge() >= 15) {
|
||||
stats.addKnowledge(-15);
|
||||
stats.refundAllPoints();
|
||||
player.sendSystemMessage(Component.literal("FOOLISH... YET HONEST."));
|
||||
} else {
|
||||
player.sendSystemMessage(Component.literal("YOUR MIND IS TOO EMPTY TO BE WORTH MY TOUCH."));
|
||||
player.hurt(player.level().damageSources().magic(), 4.0F);
|
||||
Vec3 look = player.getLookAngle().normalize().scale(-2.0D);
|
||||
player.setDeltaMovement(look.x * 5, 0.8, look.z * 5);
|
||||
player.hurtMarked = true;
|
||||
switch (choice) {
|
||||
case "forget" -> {
|
||||
if (stats.getKnowledge() >= 15) {
|
||||
stats.addKnowledge(-15);
|
||||
stats.refundAllPoints();
|
||||
player.sendSystemMessage(Component.literal("YOU ARE A BLANK SLATE. EMPTY. FORGOTTEN."));
|
||||
} else {
|
||||
player.sendSystemMessage(Component.literal("YOUR MIND IS TOO EMPTY TO BE WORTH MY TOUCH."));
|
||||
player.hurt(player.level().damageSources().magic(), 4.0F);
|
||||
Vec3 look = player.getLookAngle().normalize().scale(-2.0D);
|
||||
player.setDeltaMovement(look.x * 5, 0.8, look.z * 5);
|
||||
player.hurtMarked = true;
|
||||
}
|
||||
PlayerStatsProvider.sync(player);
|
||||
}
|
||||
|
||||
case "understand" -> {
|
||||
if (!net.fretux.ascend.compat.AscendMMCompat.isMindMotionPresent())
|
||||
return;
|
||||
|
||||
player.getCapability(net.fretux.mindmotion.player.PlayerCapabilityProvider.SANITY).ifPresent(sanity -> {
|
||||
|
||||
float sanityPercent = sanity.getSanity() / sanity.getMaxSanity();
|
||||
|
||||
if (sanityPercent >= 0.90f) {
|
||||
stats.addKnowledge(5);
|
||||
sanity.setSanity(0);
|
||||
sanity.setInsanity(0);
|
||||
|
||||
player.sendSystemMessage(Component.literal("YOUR MIND EXPANDS AS IT BREAKS."));
|
||||
} else {
|
||||
player.sendSystemMessage(Component.literal("YOUR MIND IS NOT YET CLEAR ENOUGH."));
|
||||
}
|
||||
});
|
||||
|
||||
PlayerStatsProvider.sync(player);
|
||||
}
|
||||
|
||||
case "rest" -> {
|
||||
if (!net.fretux.ascend.compat.AscendMMCompat.isMindMotionPresent())
|
||||
return;
|
||||
|
||||
if (stats.getKnowledge() >= 10) {
|
||||
stats.addKnowledge(-10);
|
||||
|
||||
player.getCapability(net.fretux.mindmotion.player.PlayerCapabilityProvider.SANITY).ifPresent(sanity -> {
|
||||
sanity.setSanity(sanity.getMaxSanity());
|
||||
sanity.setInsanity(0);
|
||||
});
|
||||
|
||||
player.sendSystemMessage(Component.literal("THE SHRINE RESTORES YOUR FRACTURED MIND."));
|
||||
} else {
|
||||
player.sendSystemMessage(Component.literal("YOU LACK THE KNOWLEDGE TO REST."));
|
||||
}
|
||||
|
||||
PlayerStatsProvider.sync(player);
|
||||
}
|
||||
PlayerStatsProvider.sync(player);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user