Push version to 2.0.0
This commit is contained in:
+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.2.0
|
mod_version=2.0.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
|
||||||
|
|||||||
@@ -20,9 +20,17 @@ public class ShrineScreen extends Screen {
|
|||||||
|
|
||||||
private int dialogueStage = 0; // 0 = intro, 1 = offer, 2 = confirm
|
private int dialogueStage = 0; // 0 = intro, 1 = offer, 2 = confirm
|
||||||
private int playerKnowledge = 0;
|
private int playerKnowledge = 0;
|
||||||
|
private final boolean essenceMode;
|
||||||
|
|
||||||
|
public ShrineScreen(boolean essenceMode) {
|
||||||
|
super(essenceMode
|
||||||
|
? Component.literal("Remembrance Essence")
|
||||||
|
: Component.literal("Shrine of Remembrance"));
|
||||||
|
this.essenceMode = essenceMode;
|
||||||
|
}
|
||||||
|
|
||||||
public ShrineScreen() {
|
public ShrineScreen() {
|
||||||
super(Component.literal("Shrine of Remembrance"));
|
this(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -45,6 +53,33 @@ public class ShrineScreen extends Screen {
|
|||||||
this.clearWidgets();
|
this.clearWidgets();
|
||||||
int buttonY = topPos + 85;
|
int buttonY = topPos + 85;
|
||||||
|
|
||||||
|
// ESSENCE MODE — skip all dialogue, go straight to options
|
||||||
|
if (essenceMode) {
|
||||||
|
addRenderableWidget(Button.builder(Component.literal("FORGET"), (btn) -> {
|
||||||
|
PacketHandler.INSTANCE.sendToServer(new ServerboundShrineChoicePacket("forget"));
|
||||||
|
Minecraft.getInstance().setScreen(null);
|
||||||
|
}).bounds(leftPos + 20, buttonY, WIDTH - 40, 20).build());
|
||||||
|
|
||||||
|
int y = buttonY + 25;
|
||||||
|
|
||||||
|
addRenderableWidget(Button.builder(Component.literal("UNDERSTAND"), (btn) -> {
|
||||||
|
PacketHandler.INSTANCE.sendToServer(new ServerboundShrineChoicePacket("understand"));
|
||||||
|
Minecraft.getInstance().setScreen(null);
|
||||||
|
}).bounds(leftPos + 20, y, WIDTH - 40, 20).build());
|
||||||
|
y += 25;
|
||||||
|
|
||||||
|
addRenderableWidget(Button.builder(Component.literal("REST"), (btn) -> {
|
||||||
|
PacketHandler.INSTANCE.sendToServer(new ServerboundShrineChoicePacket("rest"));
|
||||||
|
Minecraft.getInstance().setScreen(null);
|
||||||
|
}).bounds(leftPos + 20, y, WIDTH - 40, 20).build());
|
||||||
|
y += 25;
|
||||||
|
|
||||||
|
addRenderableWidget(Button.builder(Component.literal("LEAVE"), (btn) -> {
|
||||||
|
Minecraft.getInstance().setScreen(null);
|
||||||
|
}).bounds(leftPos + 20, y, WIDTH - 40, 20).build());
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
switch (dialogueStage) {
|
switch (dialogueStage) {
|
||||||
case 0 -> { // Intro
|
case 0 -> { // Intro
|
||||||
Button engageButton = Button.builder(Component.literal("I WISH TO ENGAGE IN A DEAL."), (btn) -> {
|
Button engageButton = Button.builder(Component.literal("I WISH TO ENGAGE IN A DEAL."), (btn) -> {
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class IronsSpellbooksCompat {
|
|||||||
int willpower = stats.getAttributeLevel("willpower");
|
int willpower = stats.getAttributeLevel("willpower");
|
||||||
|
|
||||||
applyIntelligence(player, intelligence);
|
applyIntelligence(player, intelligence);
|
||||||
applyCharisma(player, charisma); // now also handles support/summons internally
|
applyCharisma(player, charisma);
|
||||||
applyMagicScaling(player, magicScaling);
|
applyMagicScaling(player, magicScaling);
|
||||||
applyWillpowerCastEfficiency(player, willpower);
|
applyWillpowerCastEfficiency(player, willpower);
|
||||||
});
|
});
|
||||||
@@ -73,20 +73,10 @@ public class IronsSpellbooksCompat {
|
|||||||
(Attribute) AttributeRegistry.MAX_MANA.get(),
|
(Attribute) AttributeRegistry.MAX_MANA.get(),
|
||||||
INT_MAX_MANA_UUID,
|
INT_MAX_MANA_UUID,
|
||||||
"Ascend INT max mana",
|
"Ascend INT max mana",
|
||||||
intelligence * 2.0d
|
intelligence * 3.0d
|
||||||
);
|
);
|
||||||
double spellPowerPerPoint = 0.004d;
|
double regenPerPoint = 0.004d;
|
||||||
double spellPowerMax = 0.40d;
|
double regenMax = 0.40d;
|
||||||
double spellPowerBonus = Math.min(intelligence * spellPowerPerPoint, spellPowerMax);
|
|
||||||
applyMultiplyBaseModifier(
|
|
||||||
player,
|
|
||||||
(Attribute) AttributeRegistry.SPELL_POWER.get(),
|
|
||||||
INT_SPELL_POWER_UUID,
|
|
||||||
"Ascend INT spell power",
|
|
||||||
spellPowerBonus
|
|
||||||
);
|
|
||||||
double regenPerPoint = 0.002d;
|
|
||||||
double regenMax = 0.25d;
|
|
||||||
double regenBonus = Math.min(intelligence * regenPerPoint, regenMax);
|
double regenBonus = Math.min(intelligence * regenPerPoint, regenMax);
|
||||||
applyMultiplyBaseModifier(
|
applyMultiplyBaseModifier(
|
||||||
player,
|
player,
|
||||||
@@ -95,23 +85,11 @@ public class IronsSpellbooksCompat {
|
|||||||
"Ascend INT mana regen",
|
"Ascend INT mana regen",
|
||||||
regenBonus
|
regenBonus
|
||||||
);
|
);
|
||||||
double cdrPerPoint = 0.0015d;
|
|
||||||
double cdrMax = 0.20d;
|
|
||||||
double cdrBonus = Math.min(intelligence * cdrPerPoint, cdrMax);
|
|
||||||
applyMultiplyBaseModifier(
|
|
||||||
player,
|
|
||||||
(Attribute) AttributeRegistry.COOLDOWN_REDUCTION.get(),
|
|
||||||
INT_COOLDOWN_REDUCTION_UUID,
|
|
||||||
"Ascend INT cooldown reduction",
|
|
||||||
cdrBonus
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void clearIntelligence(Player player) {
|
private static void clearIntelligence(Player player) {
|
||||||
removeModifier(player, (Attribute) AttributeRegistry.MAX_MANA.get(), INT_MAX_MANA_UUID);
|
removeModifier(player, (Attribute) AttributeRegistry.MAX_MANA.get(), INT_MAX_MANA_UUID);
|
||||||
removeModifier(player, (Attribute) AttributeRegistry.SPELL_POWER.get(), INT_SPELL_POWER_UUID);
|
|
||||||
removeModifier(player, (Attribute) AttributeRegistry.MANA_REGEN.get(), INT_MANA_REGEN_UUID);
|
removeModifier(player, (Attribute) AttributeRegistry.MANA_REGEN.get(), INT_MANA_REGEN_UUID);
|
||||||
removeModifier(player, (Attribute) AttributeRegistry.COOLDOWN_REDUCTION.get(), INT_COOLDOWN_REDUCTION_UUID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void applyWillpowerCastEfficiency(Player player, int willpower) {
|
public static void applyWillpowerCastEfficiency(Player player, int willpower) {
|
||||||
@@ -152,7 +130,7 @@ public class IronsSpellbooksCompat {
|
|||||||
if (charisma <= 0) {
|
if (charisma <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
double manaPerPoint = 0.5d;
|
double manaPerPoint = 1.5d;
|
||||||
double bonusMana = charisma * manaPerPoint;
|
double bonusMana = charisma * manaPerPoint;
|
||||||
applyAddModifier(
|
applyAddModifier(
|
||||||
player,
|
player,
|
||||||
@@ -221,8 +199,8 @@ public class IronsSpellbooksCompat {
|
|||||||
clearMagicScaling(player);
|
clearMagicScaling(player);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
double spPerPoint = 0.006d;
|
double spPerPoint = 0.0075d;
|
||||||
double spMax = 0.60d;
|
double spMax = 0.75d;
|
||||||
double spBonus = Math.min(magicScaling * spPerPoint, spMax);
|
double spBonus = Math.min(magicScaling * spPerPoint, spMax);
|
||||||
applyMultiplyBaseModifier(
|
applyMultiplyBaseModifier(
|
||||||
player,
|
player,
|
||||||
@@ -231,19 +209,8 @@ public class IronsSpellbooksCompat {
|
|||||||
"Ascend Magic Scaling spell power",
|
"Ascend Magic Scaling spell power",
|
||||||
spBonus
|
spBonus
|
||||||
);
|
);
|
||||||
double regenPerPoint = 0.001d;
|
double cdrPerPoint = 0.0012d;
|
||||||
double regenMax = 0.15d;
|
double cdrMax = 0.18d;
|
||||||
double regenBonus = Math.min(magicScaling * regenPerPoint, regenMax);
|
|
||||||
applyMultiplyBaseModifier(
|
|
||||||
player,
|
|
||||||
(Attribute) AttributeRegistry.MANA_REGEN.get(),
|
|
||||||
MAG_MANA_REGEN_UUID,
|
|
||||||
"Ascend Magic Scaling mana regen",
|
|
||||||
regenBonus
|
|
||||||
);
|
|
||||||
|
|
||||||
double cdrPerPoint = 0.001d;
|
|
||||||
double cdrMax = 0.10d;
|
|
||||||
double cdrBonus = Math.min(magicScaling * cdrPerPoint, cdrMax);
|
double cdrBonus = Math.min(magicScaling * cdrPerPoint, cdrMax);
|
||||||
applyMultiplyBaseModifier(
|
applyMultiplyBaseModifier(
|
||||||
player,
|
player,
|
||||||
@@ -256,7 +223,6 @@ public class IronsSpellbooksCompat {
|
|||||||
|
|
||||||
private static void clearMagicScaling(Player player) {
|
private static void clearMagicScaling(Player player) {
|
||||||
removeModifier(player, (Attribute) AttributeRegistry.SPELL_POWER.get(), MAG_SPELL_POWER_UUID);
|
removeModifier(player, (Attribute) AttributeRegistry.SPELL_POWER.get(), MAG_SPELL_POWER_UUID);
|
||||||
removeModifier(player, (Attribute) AttributeRegistry.MANA_REGEN.get(), MAG_MANA_REGEN_UUID);
|
|
||||||
removeModifier(player, (Attribute) AttributeRegistry.COOLDOWN_REDUCTION.get(), MAG_COOLDOWN_REDUCTION_UUID);
|
removeModifier(player, (Attribute) AttributeRegistry.COOLDOWN_REDUCTION.get(), MAG_COOLDOWN_REDUCTION_UUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,5 +24,7 @@ public class AscendDataGenerators {
|
|||||||
generator.addProvider(event.includeClient(), new AscendItemModelProvider(output, existingFileHelper));
|
generator.addProvider(event.includeClient(), new AscendItemModelProvider(output, existingFileHelper));
|
||||||
generator.addProvider(event.includeServer(), new ModLootTableProvider(output));
|
generator.addProvider(event.includeServer(), new ModLootTableProvider(output));
|
||||||
generator.addProvider(event.includeServer(), new ModWorldGenProvider(output, event.getLookupProvider()));
|
generator.addProvider(event.includeServer(), new ModWorldGenProvider(output, event.getLookupProvider()));
|
||||||
|
generator.addProvider(event.includeServer(), new ModBlockTagProvider(output, event.getLookupProvider(), existingFileHelper));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -19,6 +19,7 @@ public class AscendItemModelProvider extends ItemModelProvider {
|
|||||||
protected void registerModels() {
|
protected void registerModels() {
|
||||||
assert ModItems.MOONSEYE_TOME.getId() != null;
|
assert ModItems.MOONSEYE_TOME.getId() != null;
|
||||||
basicItem(ModItems.MOONSEYE_TOME.getId().getPath());
|
basicItem(ModItems.MOONSEYE_TOME.getId().getPath());
|
||||||
|
basicItem(ModItems.REMEMBRANCE_ESSENCE.getId().getPath());
|
||||||
withExistingParent(ModBlocks.SHRINE_OF_REMEMBRANCE.getId().getPath(),
|
withExistingParent(ModBlocks.SHRINE_OF_REMEMBRANCE.getId().getPath(),
|
||||||
modLoc("block/" + ModBlocks.SHRINE_OF_REMEMBRANCE.getId().getPath()));
|
modLoc("block/" + ModBlocks.SHRINE_OF_REMEMBRANCE.getId().getPath()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.fretux.ascend.datagen;
|
package net.fretux.ascend.datagen;
|
||||||
|
|
||||||
import net.fretux.ascend.registry.ModBlocks;
|
import net.fretux.ascend.registry.ModBlocks;
|
||||||
|
import net.fretux.ascend.registry.ModItems;
|
||||||
import net.minecraft.data.loot.BlockLootSubProvider;
|
import net.minecraft.data.loot.BlockLootSubProvider;
|
||||||
import net.minecraft.world.flag.FeatureFlags;
|
import net.minecraft.world.flag.FeatureFlags;
|
||||||
|
|
||||||
@@ -14,7 +15,8 @@ public class ModBlockLootProvider extends BlockLootSubProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void generate() {
|
protected void generate() {
|
||||||
|
this.add(ModBlocks.SHRINE_OF_REMEMBRANCE.get(),
|
||||||
|
createSingleItemTable(ModItems.REMEMBRANCE_ESSENCE.get()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package net.fretux.ascend.datagen;
|
||||||
|
|
||||||
|
import net.fretux.ascend.AscendMod;
|
||||||
|
import net.fretux.ascend.registry.ModBlocks;
|
||||||
|
import net.minecraft.core.HolderLookup;
|
||||||
|
import net.minecraft.data.PackOutput;
|
||||||
|
import net.minecraft.tags.BlockTags;
|
||||||
|
import net.minecraftforge.common.data.BlockTagsProvider;
|
||||||
|
import net.minecraftforge.common.data.ExistingFileHelper;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
public class ModBlockTagProvider extends BlockTagsProvider {
|
||||||
|
|
||||||
|
public ModBlockTagProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> provider, ExistingFileHelper existing) {
|
||||||
|
super(output, provider, AscendMod.MODID, existing);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addTags(HolderLookup.Provider provider) {
|
||||||
|
tag(BlockTags.MINEABLE_WITH_PICKAXE)
|
||||||
|
.add(ModBlocks.SHRINE_OF_REMEMBRANCE.get());
|
||||||
|
tag(BlockTags.NEEDS_DIAMOND_TOOL)
|
||||||
|
.add(ModBlocks.SHRINE_OF_REMEMBRANCE.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package net.fretux.ascend.item;
|
||||||
|
|
||||||
|
import net.fretux.ascend.network.PacketHandler;
|
||||||
|
import net.fretux.ascend.network.ServerboundShrineChoicePacket;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.InteractionResultHolder;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
|
||||||
|
public class RemembranceEssenceItem extends Item {
|
||||||
|
|
||||||
|
public RemembranceEssenceItem(Properties props) {
|
||||||
|
super(props);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand hand) {
|
||||||
|
ItemStack stack = player.getItemInHand(hand);
|
||||||
|
if (!level.isClientSide) {
|
||||||
|
player.sendSystemMessage(Component.literal("THE ESSENCE WHISPERS..."));
|
||||||
|
PacketHandler.sendToPlayerOpenEssenceUI((ServerPlayer) player);
|
||||||
|
}
|
||||||
|
return InteractionResultHolder.sidedSuccess(stack, level.isClientSide());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Essence is consumed after the action is performed
|
||||||
|
public static void consume(Player player) {
|
||||||
|
for (InteractionHand hand : InteractionHand.values()) {
|
||||||
|
ItemStack item = player.getItemInHand(hand);
|
||||||
|
if (item.getItem() instanceof RemembranceEssenceItem) {
|
||||||
|
item.shrink(1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package net.fretux.ascend.network;
|
||||||
|
|
||||||
|
import net.fretux.ascend.client.screen.ShrineScreen;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class ClientboundOpenEssenceScreenPacket {
|
||||||
|
public ClientboundOpenEssenceScreenPacket() {}
|
||||||
|
|
||||||
|
public static void handle(ClientboundOpenEssenceScreenPacket msg, Supplier<NetworkEvent.Context> ctx) {
|
||||||
|
ctx.get().enqueueWork(() -> {
|
||||||
|
Minecraft.getInstance().setScreen(new ShrineScreen(true));
|
||||||
|
});
|
||||||
|
ctx.get().setPacketHandled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,8 +2,10 @@ package net.fretux.ascend.network;
|
|||||||
|
|
||||||
import net.fretux.ascend.AscendMod;
|
import net.fretux.ascend.AscendMod;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraftforge.network.NetworkDirection;
|
import net.minecraftforge.network.NetworkDirection;
|
||||||
import net.minecraftforge.network.NetworkRegistry;
|
import net.minecraftforge.network.NetworkRegistry;
|
||||||
|
import net.minecraftforge.network.PacketDistributor;
|
||||||
import net.minecraftforge.network.simple.SimpleChannel;
|
import net.minecraftforge.network.simple.SimpleChannel;
|
||||||
|
|
||||||
public class PacketHandler {
|
public class PacketHandler {
|
||||||
@@ -35,5 +37,16 @@ public class PacketHandler {
|
|||||||
ServerboundShrineChoicePacket::toBytes,
|
ServerboundShrineChoicePacket::toBytes,
|
||||||
ServerboundShrineChoicePacket::new,
|
ServerboundShrineChoicePacket::new,
|
||||||
ServerboundShrineChoicePacket::handle);
|
ServerboundShrineChoicePacket::handle);
|
||||||
|
INSTANCE.registerMessage(id++,
|
||||||
|
ClientboundOpenEssenceScreenPacket.class,
|
||||||
|
(msg, buf) -> {
|
||||||
|
},
|
||||||
|
buf -> new ClientboundOpenEssenceScreenPacket(),
|
||||||
|
ClientboundOpenEssenceScreenPacket::handle
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendToPlayerOpenEssenceUI(ServerPlayer player) {
|
||||||
|
INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new ClientboundOpenEssenceScreenPacket());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -52,7 +52,9 @@ public class PlayerStats {
|
|||||||
|
|
||||||
public int getXPToNextAscendLevel() {
|
public int getXPToNextAscendLevel() {
|
||||||
if (ascendLevel >= MAX_ASCEND_LEVEL) return 0;
|
if (ascendLevel >= MAX_ASCEND_LEVEL) return 0;
|
||||||
return 100 * ascendLevel;
|
double base = 100.0;
|
||||||
|
double growth = 1.3;
|
||||||
|
return (int) Math.ceil(base * Math.pow(growth, ascendLevel - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getUnspentPoints() {
|
public int getUnspentPoints() {
|
||||||
|
|||||||
@@ -21,11 +21,10 @@ public class ModBlocks {
|
|||||||
() -> new ShrineOfRemembranceBlock(
|
() -> new ShrineOfRemembranceBlock(
|
||||||
BlockBehaviour.Properties.of()
|
BlockBehaviour.Properties.of()
|
||||||
.mapColor(MapColor.COLOR_PURPLE)
|
.mapColor(MapColor.COLOR_PURPLE)
|
||||||
.strength(-1.0F, 3600000.0F) // unbreakable
|
.strength(50.0F, 1200.0F)
|
||||||
.noLootTable()
|
.requiresCorrectToolForDrops()
|
||||||
.lightLevel(s -> 6)
|
.lightLevel(s -> 6)
|
||||||
.noOcclusion()
|
.noOcclusion()
|
||||||
.requiresCorrectToolForDrops()
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package net.fretux.ascend.registry;
|
|||||||
|
|
||||||
import net.fretux.ascend.AscendMod;
|
import net.fretux.ascend.AscendMod;
|
||||||
import net.fretux.ascend.item.MoonseyeTome;
|
import net.fretux.ascend.item.MoonseyeTome;
|
||||||
|
import net.fretux.ascend.item.RemembranceEssenceItem;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.world.item.CreativeModeTab;
|
import net.minecraft.world.item.CreativeModeTab;
|
||||||
@@ -24,12 +25,17 @@ public class ModItems {
|
|||||||
.stacksTo(1)
|
.stacksTo(1)
|
||||||
.rarity(Rarity.RARE))
|
.rarity(Rarity.RARE))
|
||||||
);
|
);
|
||||||
|
public static final RegistryObject<Item> REMEMBRANCE_ESSENCE = ITEMS.register(
|
||||||
|
"remembrance_essence",
|
||||||
|
() -> new RemembranceEssenceItem(new Item.Properties().stacksTo(1))
|
||||||
|
);
|
||||||
public static final RegistryObject<CreativeModeTab> ASCEND_TAB = TABS.register("ascend_tab",
|
public static final RegistryObject<CreativeModeTab> ASCEND_TAB = TABS.register("ascend_tab",
|
||||||
() -> CreativeModeTab.builder()
|
() -> CreativeModeTab.builder()
|
||||||
.title(Component.translatable("itemGroup.ascend"))
|
.title(Component.translatable("itemGroup.ascend"))
|
||||||
.icon(() -> new ItemStack(MOONSEYE_TOME.get()))
|
.icon(() -> new ItemStack(MOONSEYE_TOME.get()))
|
||||||
.displayItems((params, output) -> {
|
.displayItems((params, output) -> {
|
||||||
output.accept(MOONSEYE_TOME.get());
|
output.accept(MOONSEYE_TOME.get());
|
||||||
|
output.accept(REMEMBRANCE_ESSENCE.get());
|
||||||
})
|
})
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ public class SimpleShrineStructure extends Structure {
|
|||||||
@Override
|
@Override
|
||||||
protected Optional<GenerationStub> findGenerationPoint(GenerationContext ctx) {
|
protected Optional<GenerationStub> findGenerationPoint(GenerationContext ctx) {
|
||||||
BlockPos pos = ctx.chunkPos().getMiddleBlockPosition(0);
|
BlockPos pos = ctx.chunkPos().getMiddleBlockPosition(0);
|
||||||
|
|
||||||
int y = ctx.chunkGenerator().getFirstFreeHeight(
|
int y = ctx.chunkGenerator().getFirstFreeHeight(
|
||||||
pos.getX(),
|
pos.getX(),
|
||||||
pos.getZ(),
|
pos.getZ(),
|
||||||
@@ -31,8 +32,28 @@ public class SimpleShrineStructure extends Structure {
|
|||||||
ctx.randomState()
|
ctx.randomState()
|
||||||
);
|
);
|
||||||
BlockPos finalPos = new BlockPos(pos.getX(), y, pos.getZ());
|
BlockPos finalPos = new BlockPos(pos.getX(), y, pos.getZ());
|
||||||
|
if (!isValidShrineLocation(ctx, finalPos)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
return Optional.of(new GenerationStub(finalPos, builder -> {
|
return Optional.of(new GenerationStub(finalPos, builder -> {
|
||||||
builder.addPiece(new ShrinePiece(finalPos));
|
builder.addPiece(new ShrinePiece(finalPos));
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isValidShrineLocation(GenerationContext ctx, BlockPos pos) {
|
||||||
|
var column = ctx.chunkGenerator().getBaseColumn(
|
||||||
|
pos.getX(),
|
||||||
|
pos.getZ(),
|
||||||
|
ctx.heightAccessor(),
|
||||||
|
ctx.randomState()
|
||||||
|
);
|
||||||
|
var groundState = column.getBlock(pos.getY() - 1);
|
||||||
|
if (!groundState.getFluidState().isEmpty()) return false;
|
||||||
|
if (!groundState.isSolid()) return false;
|
||||||
|
if (groundState.canBeReplaced()) return false;
|
||||||
|
if (groundState.is(net.minecraft.tags.BlockTags.SAND)) return false;
|
||||||
|
if (groundState.is(net.minecraft.tags.BlockTags.SNOW)) return false;
|
||||||
|
if (groundState.is(net.minecraft.tags.BlockTags.LEAVES)) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"ascend.attribute.fortitude": "Fortitude",
|
"ascend.attribute.fortitude": "Fortitude",
|
||||||
"ascend.attribute.fortitude.desc": "Increases max health and knockback resistance.",
|
"ascend.attribute.fortitude.desc": "Increases max health and knockback resistance.",
|
||||||
"ascend.attribute.intelligence": "Intelligence",
|
"ascend.attribute.intelligence": "Intelligence",
|
||||||
"ascend.attribute.intelligence.desc": "Boosts mana, spell power, mana regen & cooldown reduction (with Iron's Spellbooks).",
|
"ascend.attribute.intelligence.desc": "Increases max mana and mana regeneration. Also lowers enchantment cost and buffs potions.",
|
||||||
"ascend.attribute.willpower": "Willpower",
|
"ascend.attribute.willpower": "Willpower",
|
||||||
"ascend.attribute.willpower.desc": "Reduces sanity drain and improves stamina/tempo.",
|
"ascend.attribute.willpower.desc": "Reduces sanity drain and improves stamina/tempo.",
|
||||||
"ascend.attribute.charisma": "Charisma",
|
"ascend.attribute.charisma": "Charisma",
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
"ascend.attribute.heavy_scaling": "Heavy Scaling",
|
"ascend.attribute.heavy_scaling": "Heavy Scaling",
|
||||||
"ascend.attribute.heavy_scaling.desc": "Improves heavy weapon performance.",
|
"ascend.attribute.heavy_scaling.desc": "Improves heavy weapon performance.",
|
||||||
"ascend.attribute.magic_scaling": "Magic Scaling",
|
"ascend.attribute.magic_scaling": "Magic Scaling",
|
||||||
"ascend.attribute.magic_scaling.desc": "Increases spell power and mana efficiency for scaling spells.",
|
"ascend.attribute.magic_scaling.desc": "Increases spell power, spell damage, and spell cooldown reduction.",
|
||||||
"item.ascend.moonseye_tome": "Moonseye Tome",
|
"item.ascend.moonseye_tome": "Moonseye Tome",
|
||||||
"item.ascend.moonseye_tome.desc": "A forbidden scripture that reveals knowledge of the Depths. Grants 100 Knowledge on first use, 50 afterwards.",
|
"item.ascend.moonseye_tome.desc": "A forbidden scripture that reveals knowledge of the Depths. Grants 100 Knowledge on first use, 50 afterwards.",
|
||||||
"item.ascend.moonseye_tome.used": "You gained %s Knowledge from the Moonseye Tome!",
|
"item.ascend.moonseye_tome.used": "You gained %s Knowledge from the Moonseye Tome!",
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 238 B |
Reference in New Issue
Block a user