Skip to content

Commit

Permalink
Base registration + manager system setup + misc fixes
Browse files Browse the repository at this point in the history
(Some fixes due l8r)
  • Loading branch information
RaveTr committed May 17, 2024
1 parent 7285e14 commit 074b460
Show file tree
Hide file tree
Showing 19 changed files with 377 additions and 33 deletions.
2 changes: 0 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,6 @@ loom {

accessWidenerPath = file("src/main/resources/${mod_id}.accesswidener")

mixin { defaultRefmapName.set("${mod_id}.refmap.json") }

mods {
mod_id {
sourceSet sourceSets.main
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ org.gradle.parallel=true
mod_name=Tropics
mod_version=1.0.0
mod_group=com.tropicdev
mod_authors=Funfz, Meme Man, IMB11
mod_authors=Funfz, Meme Man, IMB11, Apollo
mod_credits=TropicDev Team
mod_id=tropics
mod_license=All Rights Reserved
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.tropicdev;
package com.tropicdev.tropics;

import net.fabricmc.api.ClientModInitializer;

Expand Down
5 changes: 3 additions & 2 deletions src/client/resources/tropics.client.mixins.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
{
"required": true,
"package": "com.tropicdev.mixins.client",
"package": "com.tropicdev.tropics.mixins.client",
"compatibilityLevel": "JAVA_17",
"minVersion": "0.8.4",
"client": [
"com.tropicdev.mixins.ExampleClientMixin"

],
"injectors": {
"defaultRequire": 1
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// 1.20.1 2024-05-17T22:57:10.7395782 Tropics/Tropics: Language Localization (en_us)
884888803f0cb267d6e415d82fc4462d9f4693fe assets\tropics\lang\en_us.json
3 changes: 3 additions & 0 deletions src/main/generated/assets/tropics/lang/en_us.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"item.minecraft.air": "Air"
}
12 changes: 0 additions & 12 deletions src/main/java/com/tropicdev/datagen/TropicsDataGenerator.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
package com.tropicdev;
package com.tropicdev.tropics;

import com.tropicdev.tropics.manager.TropicsModManager;
import net.fabricmc.api.ModInitializer;
import net.minecraft.resources.ResourceLocation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Locale;

public class Tropics implements ModInitializer {
public static final String MOD_NAME = "Tropics";
public static final String MODID = "tropics";
public static final Logger LOGGER = LoggerFactory.getLogger(MODID);

@Override
public void onInitialize() {
TropicsModManager.registerAll();
}

public static ResourceLocation prefix(String path) {
return new ResourceLocation(MODID, path.toLowerCase(Locale.ROOT));
}
}
23 changes: 23 additions & 0 deletions src/main/java/com/tropicdev/tropics/datagen/TropicsDataGen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.tropicdev.tropics.datagen;

import com.tropicdev.tropics.Tropics;
import com.tropicdev.tropics.datagen.providers.TropicsItemModelProvider;
import com.tropicdev.tropics.datagen.providers.TropicsLanguageProvider;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;

public class TropicsDataGen implements DataGeneratorEntrypoint {

@Override
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
FabricDataGenerator.Pack cdPack = fabricDataGenerator.createPack();

cdPack.addProvider(TropicsItemModelProvider::new);
cdPack.addProvider(TropicsLanguageProvider::new);
}

@Override
public String getEffectiveModId() {
return Tropics.MODID;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.tropicdev.tropics.datagen.providers;

import com.tropicdev.tropics.Tropics;
import com.tropicdev.tropics.registry.TropicsItems;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
import net.minecraft.data.models.BlockModelGenerators;
import net.minecraft.data.models.ItemModelGenerators;
import net.minecraft.data.models.model.ModelTemplates;

public class TropicsItemModelProvider extends FabricModelProvider {

public TropicsItemModelProvider(FabricDataOutput output) {
super(output);
}

@Override
public String getName() {
return Tropics.MOD_NAME.concat(": General (Block/Item) Models");
}

@Override
public void generateBlockStateModels(BlockModelGenerators blockStateModelGenerator) {

}

@Override
public void generateItemModels(ItemModelGenerators itemModelGenerator) {
TropicsItems.getRegisteredItems().values().forEach(curItemSup -> { //TODO Edge-case automation (probably a bunch of yanderedev looking ahh code with the checks and all that :skull:)
itemModelGenerator.generateFlatItem(curItemSup.get(), ModelTemplates.FLAT_HANDHELD_ITEM);
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
package com.tropicdev.tropics.datagen.providers;

import com.google.common.collect.LinkedHashMultimap;
import com.tropicdev.tropics.Tropics;
import com.tropicdev.tropics.registry.TropicsItems;
import com.tropicdev.tropics.util.MiscUtil;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricLanguageProvider;
import net.minecraft.world.item.Item;

import java.util.List;
import java.util.stream.Collectors;

public class TropicsLanguageProvider extends FabricLanguageProvider {
private static final ObjectArrayList<String> DEFAULT_SEPARATORS = ObjectArrayList.of("Of", "And");
private static final Object2ObjectOpenHashMap<String, String> MANUAL_TRANSLATIONS = new Object2ObjectOpenHashMap<>();
private static final LinkedHashMultimap<String, String> MANUAL_INSERTIONS = LinkedHashMultimap.create();

public TropicsLanguageProvider(FabricDataOutput dataOutput) {
super(dataOutput);
}

@Override
public String getName() {
return Tropics.MOD_NAME.concat(": Language Localization (en_us)"); //TODO Maybe multi-language support?
}

public static void addManualTranslation(String localisedKey, String translationValue) {
MANUAL_INSERTIONS.put(localisedKey, translationValue);
}

private String handleInput(String displayName) {
ObjectArrayList<String> finalizedList = new ObjectArrayList<>(1);

MANUAL_INSERTIONS.asMap().forEach((curDisplayName, matchersAndInsertion) -> {
if (!displayName.equalsIgnoreCase(curDisplayName)) return;

ObjectArrayList<String> copiedMatchersAndInsertions = new ObjectArrayList<String>(matchersAndInsertion);
ObjectArrayList<String> prunedMatchersAndInsertion = copiedMatchersAndInsertions.stream()
.filter(curString -> copiedMatchersAndInsertions.indexOf(curString) < 2)
.collect(Collectors.toCollection(ObjectArrayList::new));

if (curDisplayName.indexOf(prunedMatchersAndInsertion.get(0)) == -1) return;

int insertionLocation = curDisplayName.indexOf(prunedMatchersAndInsertion.get(0)) + prunedMatchersAndInsertion.get(0).length() - 1;

curDisplayName = MiscUtil.insertStringAt(curDisplayName, prunedMatchersAndInsertion.get(1), insertionLocation);

finalizedList.add(curDisplayName);
Tropics.LOGGER.debug("[Inserted Manual String]: " + displayName + " -> " + curDisplayName);
});

return finalizedList.isEmpty() ? displayName : finalizedList.get(0);
}

// https://stackoverflow.com/questions/1892765/how-to-capitalize-the-first-character-of-each-word-in-a-string
private static String formatString(String input, List<String> separators) {
char[] charSet = input.toLowerCase().toCharArray();
boolean found = false;

for (int i = 0; i < charSet.length - 1; i++) {
if (!found && Character.isLetter(charSet[i])) {
charSet[i] = Character.toUpperCase(charSet[i]);
found = true;
} else if (Character.isWhitespace(charSet[i]) || charSet[i] == '.' || charSet[i] == '_') found = false;
}

String baseResult = String.valueOf(charSet);

for (String lcw : DEFAULT_SEPARATORS) if (baseResult.contains(lcw)) baseResult = baseResult.replaceAll(lcw, lcw.toLowerCase());

return baseResult;
}

private static String formatString(String input) {
return formatString(input, DEFAULT_SEPARATORS);
}

private String getTranslatedRegistryName(String registryName, List<String> separators) {
if (registryName.isBlank() || registryName.isEmpty() || registryName == null) return registryName;
if (!registryName.contains(".")) return registryName;

String regNameTemp = registryName;
String formattedName = formatString(regNameTemp, separators);
String displayName = formattedName.substring(formattedName.lastIndexOf(".") + 1).replaceAll("_", " ");

return displayName;
}

private String getTranslatedRegistryName(String registryName) {
return getTranslatedRegistryName(registryName, DEFAULT_SEPARATORS);
}

private void localizeGeneralRegistryName(String registryName, String translatedName, List<String> toTrim, TranslationBuilder builder) { //TODO Probably overload these fellas
if (toTrim != null && !toTrim.isEmpty()) {
for (int i = 0; i < toTrim.size(); i++) {
String curTrim = toTrim.get(i);

translatedName = translatedName.replaceFirst(curTrim, "");
}
}

if (!MANUAL_TRANSLATIONS.containsKey(registryName)) builder.add(registryName, handleInput(translatedName));
}

private void localizeGeneralRegistryName(String registryName, List<String> separators, List<String> toTrim, TranslationBuilder builder) {
String translatedRegName = getTranslatedRegistryName(registryName, separators);

if (toTrim != null && !toTrim.isEmpty()) {
for (int i = 0; i < toTrim.size(); i++) {
String curTrim = toTrim.get(i);

translatedRegName = translatedRegName.replaceFirst(curTrim, "");
}
}

if (!MANUAL_TRANSLATIONS.containsKey(registryName)) builder.add(registryName, handleInput(translatedRegName));
}

private void localizeGeneralRegistryName(String registryName, String translatedName, TranslationBuilder builder) {
localizeGeneralRegistryName(registryName, translatedName, List.of(), builder);
}

private void localizeGeneralRegistryName(String registryName, List<String> toTrim, TranslationBuilder builder) {
localizeGeneralRegistryName(registryName, DEFAULT_SEPARATORS, toTrim, builder);
}

private void localizeGeneralRegistryName(String registryName, TranslationBuilder builder) {
localizeGeneralRegistryName(registryName, List.of(), builder);
}

private void translateItems(TranslationBuilder builder) {
TropicsItems.getRegisteredItems().values().forEach(itemRegEntry -> {
Item itemEntry = itemRegEntry.get();
String itemRegName = itemEntry.getDescriptionId();

Tropics.LOGGER.debug("[Currently Translating Item]: " + itemRegName + " -> " + getTranslatedRegistryName(itemRegName));

localizeGeneralRegistryName(itemRegName, builder);
});
}

private void handleManualTranslations(TranslationBuilder builder) {
MANUAL_TRANSLATIONS.forEach((translationKey, translationValue) -> {
if ((translationKey == null || translationValue == null) || translationKey.isEmpty() || translationKey.isBlank() || translationValue.isEmpty() || translationValue.isBlank()) return;

builder.add(translationKey, translationValue);
});
}

@Override
public void generateTranslations(TranslationBuilder translationBuilder) {
translateItems(translationBuilder);

handleManualTranslations(translationBuilder);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.tropicdev.tropics.manager;

public final class TropicsEventManager {

static void registerEvents() {
registerCommonEvents();
registerServerEvents();
registerClientEvents();
}

private static void registerClientEvents() {

}

private static void registerCommonEvents() {

}

private static void registerServerEvents() {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.tropicdev.tropics.manager;

public final class TropicsModManager {

public static void registerAll() {
TropicsEventManager.registerEvents();
TropicsRegistryManager.registerRegistries();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.tropicdev.tropics.manager;

import com.tropicdev.tropics.registry.TropicsItems;

public final class TropicsRegistryManager {

static void registerRegistries() {
TropicsItems.registerItems();
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/tropicdev/tropics/registry/TropicsFood.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.tropicdev.tropics.registry;

import net.minecraft.world.food.FoodProperties;

public class TropicsFood {
public static final FoodProperties PINA_COLADA = new FoodProperties.Builder().nutrition(7).saturationMod(0.5F).build();
}
33 changes: 33 additions & 0 deletions src/main/java/com/tropicdev/tropics/registry/TropicsItems.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.tropicdev.tropics.registry;

import com.google.common.collect.ImmutableMap;
import com.tropicdev.tropics.Tropics;
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;

import java.util.function.Supplier;

public class TropicsItems {
private static final Object2ObjectLinkedOpenHashMap<ResourceLocation, Supplier<Item>> REGISTERED_ITEMS = new Object2ObjectLinkedOpenHashMap<>();

public static final Item PINA_COLADA = registerItem("pina_colada", () -> new Item(new Item.Properties().food(TropicsFood.PINA_COLADA).stacksTo(1)));

protected static <I extends Item> I registerItem(String id, Supplier<I> itemSup) {
return registerItem(Tropics.prefix(id), itemSup);
}

protected static <I extends Item> I registerItem(ResourceLocation id, Supplier<I> itemSup) {
return (I) REGISTERED_ITEMS.putIfAbsent(id, (Supplier<Item>) itemSup);
}

public static ImmutableMap<ResourceLocation, Supplier<Item>> getRegisteredItems() {
return ImmutableMap.copyOf(REGISTERED_ITEMS);
}

public static void registerItems() {
REGISTERED_ITEMS.forEach((id, itemSup) -> Registry.register(BuiltInRegistries.ITEM, id, itemSup.get()));
}
}
Loading

0 comments on commit 074b460

Please sign in to comment.