Implement M&M support for shrine choices
This commit is contained in:
@@ -99,6 +99,8 @@ minecraft {
|
|||||||
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral()
|
||||||
// Put repositories for dependencies here
|
// Put repositories for dependencies here
|
||||||
// ForgeGradle automatically adds the Forge maven and Maven Central for you
|
// ForgeGradle automatically adds the Forge maven and Maven Central for you
|
||||||
|
|
||||||
@@ -133,6 +135,8 @@ repositories {
|
|||||||
dependencies {
|
dependencies {
|
||||||
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
|
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
|
||||||
|
|
||||||
|
implementation fg.deobf("net.fretux.mindmotion:mindmotion:1.1.0")
|
||||||
|
|
||||||
// Iron's Spellbooks API only
|
// Iron's Spellbooks API only
|
||||||
compileOnly fg.deobf("io.redspace.ironsspellbooks:irons_spellbooks:${irons_spells_version}:api")
|
compileOnly fg.deobf("io.redspace.ironsspellbooks:irons_spellbooks:${irons_spells_version}:api")
|
||||||
implementation fg.deobf("io.redspace.ironsspellbooks:irons_spellbooks:${irons_spells_version}")
|
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.
|
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||||
mod_license=All Rights Reserved
|
mod_license=All Rights Reserved
|
||||||
# The mod version. See https://semver.org/
|
# 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.
|
# 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.
|
# This should match the base package used for the mod sources.
|
||||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
# 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 {
|
public class ShrineScreen extends Screen {
|
||||||
|
|
||||||
private static final int WIDTH = 260;
|
private static final int WIDTH = 260;
|
||||||
private static final int HEIGHT = 160;
|
private static final int HEIGHT = 200;
|
||||||
|
|
||||||
private int leftPos;
|
private int leftPos;
|
||||||
private int topPos;
|
private int topPos;
|
||||||
@@ -74,17 +74,31 @@ public class ShrineScreen extends Screen {
|
|||||||
addRenderableWidget(leaveButton);
|
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) -> {
|
Button forgetButton = Button.builder(Component.literal("I WISH TO FORGET."), (btn) -> {
|
||||||
PacketHandler.INSTANCE.sendToServer(new ServerboundShrineChoicePacket("forget"));
|
PacketHandler.INSTANCE.sendToServer(new ServerboundShrineChoicePacket("forget"));
|
||||||
Minecraft.getInstance().setScreen(null);
|
Minecraft.getInstance().setScreen(null);
|
||||||
}).bounds(leftPos + 20, buttonY, WIDTH - 40, 20).build();
|
}).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) -> {
|
Button leaveButton = Button.builder(Component.literal("LEAVE."), (btn) -> {
|
||||||
Minecraft.getInstance().setScreen(null);
|
Minecraft.getInstance().setScreen(null);
|
||||||
}).bounds(leftPos + 20, buttonY + 25, WIDTH - 40, 20).build();
|
}).bounds(leftPos + 20, y, WIDTH - 40, 20).build();
|
||||||
|
|
||||||
addRenderableWidget(forgetButton);
|
|
||||||
addRenderableWidget(leaveButton);
|
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.FriendlyByteBuf;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
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.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.network.NetworkEvent;
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
import net.minecraftforge.network.PacketDistributor;
|
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
@@ -33,11 +30,12 @@ public class ServerboundShrineChoicePacket {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
|
||||||
player.getCapability(PlayerStatsProvider.PLAYER_STATS).ifPresent(stats -> {
|
player.getCapability(PlayerStatsProvider.PLAYER_STATS).ifPresent(stats -> {
|
||||||
if ("forget".equals(choice)) {
|
switch (choice) {
|
||||||
|
case "forget" -> {
|
||||||
if (stats.getKnowledge() >= 15) {
|
if (stats.getKnowledge() >= 15) {
|
||||||
stats.addKnowledge(-15);
|
stats.addKnowledge(-15);
|
||||||
stats.refundAllPoints();
|
stats.refundAllPoints();
|
||||||
player.sendSystemMessage(Component.literal("FOOLISH... YET HONEST."));
|
player.sendSystemMessage(Component.literal("YOU ARE A BLANK SLATE. EMPTY. FORGOTTEN."));
|
||||||
} else {
|
} else {
|
||||||
player.sendSystemMessage(Component.literal("YOUR MIND IS TOO EMPTY TO BE WORTH MY TOUCH."));
|
player.sendSystemMessage(Component.literal("YOUR MIND IS TOO EMPTY TO BE WORTH MY TOUCH."));
|
||||||
player.hurt(player.level().damageSources().magic(), 4.0F);
|
player.hurt(player.level().damageSources().magic(), 4.0F);
|
||||||
@@ -47,6 +45,49 @@ public class ServerboundShrineChoicePacket {
|
|||||||
}
|
}
|
||||||
PlayerStatsProvider.sync(player);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
ctx.get().setPacketHandled(true);
|
ctx.get().setPacketHandled(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user