Skip to content

Commit

Permalink
update ardoni name loading logic
Browse files Browse the repository at this point in the history
  • Loading branch information
IAFEnvoy committed Jan 9, 2025
1 parent bc5d786 commit 58d9f23
Show file tree
Hide file tree
Showing 18 changed files with 111 additions and 61 deletions.
5 changes: 1 addition & 4 deletions common/src/main/java/com/iafenvoy/sow/Constants.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package com.iafenvoy.sow;

import com.iafenvoy.sow.world.sound.ServerSongCubeSoundManager;
import com.iafenvoy.sow.world.sound.SongCubeSoundManager;
import net.minecraft.util.Identifier;

import java.util.UUID;

public class Constants {
public final class Constants {
public static final Identifier BEACON_TELEPORT = Identifier.of(SongsOfWar.MOD_ID, "beacon_teleport");
public static final Identifier POWER_KEYBINDING_SYNC = Identifier.of(SongsOfWar.MOD_ID, "keybinding_sync");
public static final Identifier JUMP_PRESS = Identifier.of(SongsOfWar.MOD_ID, "jump_press");
public static final UUID PROTESPHERE_UUID = UUID.fromString("babda2da-13e9-4096-baba-933bb695e319");
public static final UUID MOBILIGLIDE_UUID = UUID.fromString("3db28b1d-3fec-4a31-9f50-6c04f30e33f1");
public static SongCubeSoundManager songCubeSoundManager = ServerSongCubeSoundManager.INSTANCE;
}
10 changes: 10 additions & 0 deletions common/src/main/java/com/iafenvoy/sow/Proxies.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.iafenvoy.sow;

import com.iafenvoy.sow.data.ArdoniNameProxy;
import com.iafenvoy.sow.world.sound.SongCubeSoundManager;

public final class Proxies {
public static SongCubeSoundManager songCubeSoundManager = SongCubeSoundManager.Empty.INSTANCE;
public static ArdoniNameProxy ardoniNameProxy = ArdoniNameProxy.Empty.INSTANCE;

}
7 changes: 1 addition & 6 deletions common/src/main/java/com/iafenvoy/sow/SongsOfWar.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.iafenvoy.jupiter.ConfigManager;
import com.iafenvoy.jupiter.ServerConfigManager;
import com.iafenvoy.sow.config.SowConfig;
import com.iafenvoy.sow.data.ArdoniName;
import com.iafenvoy.sow.data.BeaconData;
import com.iafenvoy.sow.item.block.entity.WallsOfTimeBlockEntity;
import com.iafenvoy.sow.network.ServerNetworkHelper;
Expand All @@ -12,15 +11,12 @@
import com.mojang.logging.LogUtils;
import dev.architectury.event.EventResult;
import dev.architectury.event.events.common.BlockEvent;
import dev.architectury.registry.ReloadListenerRegistry;
import net.minecraft.block.Blocks;
import net.minecraft.resource.ResourceType;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import org.slf4j.Logger;

public class SongsOfWar {
public final class SongsOfWar {
public static final String MOD_ID = "sow";
public static final Logger LOGGER = LogUtils.getLogger();

Expand Down Expand Up @@ -58,7 +54,6 @@ else if (world.getBlockEntity(pos) instanceof WallsOfTimeBlockEntity blockEntity
}
return EventResult.pass();
});
ReloadListenerRegistry.register(ResourceType.SERVER_DATA, new ArdoniName(), Identifier.of(MOD_ID, "ardoni_name"));
ServerNetworkHelper.init();
}
}
12 changes: 8 additions & 4 deletions common/src/main/java/com/iafenvoy/sow/SongsOfWarClient.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.iafenvoy.sow;

import com.iafenvoy.sow.compat.LitematicaHelper;
import com.iafenvoy.sow.data.ArdoniName;
import com.iafenvoy.sow.network.ClientNetworkHelper;
import com.iafenvoy.sow.registry.SowKeybindings;
import com.iafenvoy.sow.registry.SowRenderers;
Expand All @@ -14,21 +15,24 @@
import net.minecraft.util.Identifier;

@Environment(EnvType.CLIENT)
public class SongsOfWarClient {
public final class SongsOfWarClient {
public static void init() {
SowKeybindings.init();
SowRenderers.registerEntityRenderers();
SowRenderers.registerParticleRenderer();
}

public static void process() {
Proxies.songCubeSoundManager = ClientSongCubeSoundManager.INSTANCE;
Proxies.ardoniNameProxy = ArdoniName.INSTANCE;

SowRenderers.registerSkull();
SowRenderers.registerBlockEntityRenderer();
SowRenderers.registerRenderType();
SowRenderers.registerModelPredicate();
Constants.songCubeSoundManager = ClientSongCubeSoundManager.INSTANCE;
ClientTickEvent.CLIENT_POST.register(client -> Constants.songCubeSoundManager.tick());
ReloadListenerRegistry.register(ResourceType.CLIENT_RESOURCES, new GeneratorReloader(), Identifier.of(SongsOfWar.MOD_ID, "ardoni_marker"));
ClientTickEvent.CLIENT_POST.register(client -> Proxies.songCubeSoundManager.tick());
ReloadListenerRegistry.register(ResourceType.CLIENT_RESOURCES, GeneratorReloader.INSTANCE, Identifier.of(SongsOfWar.MOD_ID, "generator"));
ReloadListenerRegistry.register(ResourceType.CLIENT_RESOURCES, ArdoniName.INSTANCE, Identifier.of(SongsOfWar.MOD_ID, "ardoni_name"));
LitematicaHelper.extractFile();
ClientNetworkHelper.init();
}
Expand Down
33 changes: 20 additions & 13 deletions common/src/main/java/com/iafenvoy/sow/data/ArdoniName.java
Original file line number Diff line number Diff line change
@@ -1,33 +1,36 @@
package com.iafenvoy.sow.data;

import com.iafenvoy.neptune.util.RandomHelper;
import com.iafenvoy.sow.SongsOfWar;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
import net.minecraft.resource.Resource;
import net.minecraft.resource.ResourceManager;
import net.minecraft.resource.SynchronousResourceReloader;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.NotNull;

import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class ArdoniName implements SynchronousResourceReloader {
@Environment(EnvType.CLIENT)
public enum ArdoniName implements SynchronousResourceReloader, ArdoniNameProxy {
INSTANCE;
private static final List<String> NAMES = new ArrayList<>();

public static String randomName() throws UnsupportedOperationException {
try {
return RandomHelper.randomOne(NAMES);
} catch (Exception e) {
throw new UnsupportedOperationException("Cannot random an ardoni name.", e);
}
}

@Override
public void reload(ResourceManager manager) {
NAMES.clear();
// String language = MinecraftClient.getInstance().options.language.toLowerCase(Locale.ROOT);
Identifier file = Identifier.of(SongsOfWar.MOD_ID, "ardoni_name/en_us.txt");
load(manager, MinecraftClient.getInstance().options.language.toLowerCase(Locale.ROOT));
if (NAMES.isEmpty()) load(manager, "en_us");
SongsOfWar.LOGGER.info("Successfully loaded {} ardoni name(s),", NAMES.size());
}

private static void load(ResourceManager manager, String language) {
Identifier file = Identifier.of(SongsOfWar.MOD_ID, "ardoni_name/%s.txt".formatted(language));
for (Resource resource : manager.getAllResources(file))
try {
BufferedReader reader = resource.getReader();
Expand All @@ -36,6 +39,10 @@ public void reload(ResourceManager manager) {
} catch (IOException e) {
throw new RuntimeException(e);
}
SongsOfWar.LOGGER.info("Successfully loaded {} ardoni name(s),", NAMES.size());
}

@Override
public @NotNull String getNameBySeed(long seed) throws UnsupportedOperationException {
return NAMES.get((int) (seed % NAMES.size()));
}
}
17 changes: 17 additions & 0 deletions common/src/main/java/com/iafenvoy/sow/data/ArdoniNameProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.iafenvoy.sow.data;

import org.jetbrains.annotations.NotNull;

public interface ArdoniNameProxy {
@NotNull
String getNameBySeed(long seed) throws UnsupportedOperationException;

enum Empty implements ArdoniNameProxy {
INSTANCE;

@Override
public @NotNull String getNameBySeed(long seed) throws UnsupportedOperationException {
return "";
}
}
}
7 changes: 4 additions & 3 deletions common/src/main/java/com/iafenvoy/sow/data/ArdoniType.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import dev.architectury.registry.registries.RegistrySupplier;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.text.Text;

import java.util.*;

Expand Down Expand Up @@ -41,9 +42,9 @@ public SowSpawnEggItem createSpawnEgg(RegistrySupplier<? extends EntityType<? ex
return new SowSpawnEggItem(type, 0xFF888888, this.primaryColor.getIntValue());
}

public String getFormattedName() {
if (this.id.isEmpty()) return "";
return this.id.substring(0, 1).toUpperCase(Locale.ROOT) + this.id.substring(1);
public Text formatName(String prefix) {
if (this == NONE || this.id.isEmpty()) return Text.literal(prefix);
return Text.translatable("ardoniType.sow.%s".formatted(this.id), Text.literal(prefix));
}

static {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@

import com.iafenvoy.neptune.util.Color4i;
import com.iafenvoy.neptune.util.RandomHelper;
import com.iafenvoy.sow.Proxies;
import com.iafenvoy.sow.SongsOfWar;
import com.iafenvoy.sow.data.ArdoniName;
import com.iafenvoy.sow.data.ArdoniType;
import com.iafenvoy.sow.entity.ardoni.AbstractArdoniEntity;
import com.iafenvoy.sow.item.block.entity.ArdoniGraveBlockEntity;
import net.minecraft.entity.EntityData;
Expand Down Expand Up @@ -38,6 +37,18 @@ public Optional<Identifier> getMarkerTextureId() {
return Optional.empty();
}

@Override
protected Text getDefaultName() {
String random = Proxies.ardoniNameProxy.getNameBySeed(this.getMarkerSeed());
if (!random.isBlank()) return this.getArdoniType().formatName(random);
return super.getDefaultName();
}

@Override
public boolean hasCustomName() {
return true;
}

@Override
public Color4i getColor() {
if (this.hasCustomName() && this.getName().getString().equals("jeb_"))
Expand Down Expand Up @@ -86,9 +97,6 @@ public void readCustomDataFromNbt(NbtCompound nbt) {
public EntityData initialize(ServerWorldAccess world, LocalDifficulty difficulty, SpawnReason spawnReason, @Nullable EntityData entityData, @Nullable NbtCompound entityNbt) {
EntityData data = super.initialize(world, difficulty, spawnReason, entityData, entityNbt);
this.setDefaultData();
if (this.getArdoniType() == ArdoniType.NONE) this.setCustomName(Text.literal(ArdoniName.randomName()));
else
this.setCustomName(Text.literal(String.format("%s %s", ArdoniName.randomName(), this.getArdoniType().getFormattedName())));
return data;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.iafenvoy.sow.item.block;

import com.iafenvoy.sow.Constants;
import com.iafenvoy.sow.Proxies;
import com.iafenvoy.sow.item.block.entity.AbstractSongCubeBlockEntity;
import com.iafenvoy.sow.power.PowerCategory;
import com.iafenvoy.sow.power.type.AbstractSongPower;
Expand Down Expand Up @@ -92,7 +92,7 @@ public ItemStack getPickStack(BlockView world, BlockPos pos, BlockState state) {
public @Nullable <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type) {
return (world1, pos, state1, blockEntity) -> {
if (blockEntity instanceof AbstractSongCubeBlockEntity songCubeBlockEntity)
Constants.songCubeSoundManager.startPlaying(pos, songCubeBlockEntity.getCategory());
Proxies.songCubeSoundManager.startPlaying(pos, songCubeBlockEntity.getCategory());
};
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.iafenvoy.sow.item.block.entity;

import com.iafenvoy.sow.Constants;
import com.iafenvoy.sow.Proxies;
import com.iafenvoy.sow.power.PowerCategory;
import com.iafenvoy.sow.power.type.AbstractSongPower;
import com.iafenvoy.sow.power.type.DummySongPower;
Expand Down Expand Up @@ -40,7 +40,7 @@ public AbstractSongPower<?> getPower() {
@Override
public void markRemoved() {
super.markRemoved();
Constants.songCubeSoundManager.destroy(this.pos);
Proxies.songCubeSoundManager.destroy(this.pos);
}

public abstract PowerCategory getCategory();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package com.iafenvoy.sow.render.util;

import com.iafenvoy.sow.render.block.ArdoniGraveBlockEntityRenderer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.resource.ResourceManager;
import net.minecraft.resource.SynchronousResourceReloader;

public class GeneratorReloader implements SynchronousResourceReloader {
@Environment(EnvType.CLIENT)
public enum GeneratorReloader implements SynchronousResourceReloader {
INSTANCE;

@Override
public void reload(ResourceManager manager) {
ArdoniMarkerGenerator.resetAll();
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,20 @@ public interface SongCubeSoundManager {
void destroy(BlockPos pos);

void tick();

enum Empty implements SongCubeSoundManager {
INSTANCE;

@Override
public void startPlaying(BlockPos pos, PowerCategory category) {
}

@Override
public void destroy(BlockPos pos) {
}

@Override
public void tick() {
}
}
}
5 changes: 5 additions & 0 deletions common/src/main/resources/assets/sow/lang/en_us.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
{
"ardoniType.sow.kaltaris": "%s Kaltaris",
"ardoniType.sow.mendoris": "%s Mendoris",
"ardoniType.sow.nestoris": "%s Nestoris",
"ardoniType.sow.sendaris": "%s Sendaris",
"ardoniType.sow.voltaris": "%s Voltaris",
"banner.sow.conchord": "Conchord Banner",
"banner.sow.conchord_simple": "Conchord Simple Banner",
"banner.sow.crown_peak": "Crown Peak Banner",
Expand Down
5 changes: 5 additions & 0 deletions common/src/main/resources/assets/sow/lang/zh_cn.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
{
"ardoniType.sow.kaltaris": "%s·卡尔塔里斯",
"ardoniType.sow.mendoris": "%s·门多里斯",
"ardoniType.sow.nestoris": "%s·内斯托里斯",
"ardoniType.sow.sendaris": "%s·森达里斯",
"ardoniType.sow.voltaris": "%s·伏尔塔里斯",
"banner.sow.conchord": "康科德旗帜",
"banner.sow.conchord_simple": "康科德简单版旗帜",
"banner.sow.crown_peak": "君主峰旗帜",
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ minecraft_version=1.20.1
enabled_platforms=fabric,forge
yarn_mappings=1.20.1+build.10
archives_base_name=SongsOfWar
mod_version=0.8.2
mod_version=0.8.3
maven_group=com.iafenvoy
architectury_version=9.2.14
fabric_loader_version=0.15.11
Expand Down

0 comments on commit 58d9f23

Please sign in to comment.