Skip to content

Commit

Permalink
Feat: Void Tear
Browse files Browse the repository at this point in the history
Feat: Items automatically get a minecraft:generated model
Fix: Loot Tables not being loaded
Chore: Event Handler reorganization
Chore: Datagen reorganization
  • Loading branch information
kd8lvt committed Oct 29, 2024
1 parent 0d07694 commit 9b8cc20
Show file tree
Hide file tree
Showing 41 changed files with 962 additions and 655 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ loader_version=0.16.4
fabric_version=0.103.0+1.21.1

# Mod Properties
mod_version=1.0.5b-1.21.1
mod_version=1.0.6+1.21.0+1.21.1
maven_group=com.kd8lvt.exclusionzone
archives_base_name=exclusionzone
modid=exclusionzone
77 changes: 7 additions & 70 deletions src/main/java/com/kd8lvt/exclusionzone/ExclusionZone.java
Original file line number Diff line number Diff line change
@@ -1,99 +1,36 @@
package com.kd8lvt.exclusionzone;

import com.kd8lvt.exclusionzone.item.PersonaWeapons.PersonaWeaponTraits;
import com.kd8lvt.exclusionzone.item.Tools.LoggingAxe;
import com.kd8lvt.exclusionzone.handler.ModEventHandlers;
import com.kd8lvt.exclusionzone.player.ToxicBuildupTracker;
import com.kd8lvt.exclusionzone.registry.ModItems;
import com.kd8lvt.exclusionzone.registry.ModRegistries;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener;
import net.minecraft.item.ItemGroup;
import net.minecraft.resource.ResourceManager;
import net.minecraft.resource.ResourceType;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.Identifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

@SuppressWarnings("unused")
public class ExclusionZone implements ModInitializer {
// This logger is used to write text to the console and the log file.
// It is considered best practice to use your mod id as the logger's name.
// That way, it's clear which mod wrote info, warnings, and errors.
public static final Logger LOGGER = LoggerFactory.getLogger("exclusionzone");
public final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public static MinecraftServer Server = null;
public static final boolean muttering_debug = false;
public static final ToxicBuildupTracker toxTracker = new ToxicBuildupTracker();

@Override
public void onInitialize() {
// This code runs as soon as Minecraft is in a mod-load-ready state.
// However, some things (like resources) may still be uninitialized.
// Proceed with mild caution.
ServerLifecycleEvents.SERVER_STARTING.register(server-> Server = server);

//CommandRegistrationCallback.EVENT.register(ModCommands::register);

//Registry
ModRegistries.registerAll();
ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new SimpleSynchronousResourceReloadListener() {
@Override
public Identifier getFabricId() {
return id("persona_weapon_traits");
}

@Override
public void reload(ResourceManager manager) {
PersonaWeaponTraits.reload(manager);
}
});

ServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, newPlayer, alive) -> {
toxTracker.remove(oldPlayer);
toxTracker.add(newPlayer);
});

ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> toxTracker.add(handler.getPlayer()));

ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> toxTracker.remove(handler.getPlayer()));

ServerTickEvents.END_SERVER_TICK.register(server -> {
toxTracker.onTick(server);
LoggingAxe.queue.processQueue(server);
});

ServerLifecycleEvents.SERVER_STOPPING.register(server->{
LoggingAxe.queue.onServerShuttingDown();
});
//Event Handlers
ModEventHandlers.registerAll();
}

//TODO: Get rid of this and do things properly
@Deprecated(forRemoval = true,since="1.6.0")
public static void runCommand(String cmd) {
if (Server != null) Server.getCommandManager().executeWithPrefix(Server.getCommandSource().withSilent(),cmd);
}

@SuppressWarnings("unused")
private static void schedule(String cmd, LocalTime targetTime) {
if (Server == null) return;
LocalTime currentTime = LocalTime.now();
long time_until = currentTime.until(targetTime, ChronoUnit.MINUTES);
if (time_until <= 2) time_until += 1440; //if two minutes or less remain until trigger time, or it's past the trigger time, roll over to the next day
scheduler.scheduleAtFixedRate(()->runCommand(cmd),
time_until,
1440, //run once daily
TimeUnit.MINUTES
);
}

public static Identifier id(String id) {
return Identifier.of("exclusionzone",id);
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,14 +1,29 @@
package com.kd8lvt.exclusionzone.datagen;

import com.kd8lvt.exclusionzone.datagen.lang.EnglishLangProvider;
import com.kd8lvt.exclusionzone.datagen.loot.ArchaeologyLootProvider;
import com.kd8lvt.exclusionzone.datagen.loot.BlockLootProvider;
import com.kd8lvt.exclusionzone.datagen.loot.EntityLootProvider;
import com.kd8lvt.exclusionzone.datagen.recipe.CraftingRecipeProvider;
import com.kd8lvt.exclusionzone.datagen.tag.ItemTagProvider;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;

public class ExclusionZoneDataGenerator implements DataGeneratorEntrypoint {
@Override
public void onInitializeDataGenerator(FabricDataGenerator generator) {
FabricDataGenerator.Pack pack = generator.createPack();
pack.addProvider(ExclusionZoneEnglishProvider::new);
pack.addProvider(ExclusionZoneRecipeGenerator::new);
pack.addProvider(ExclusionZoneModelGenerator::new);
//Languages
pack.addProvider(EnglishLangProvider::new);
//Tags
pack.addProvider(ItemTagProvider::new);
//Recipes
pack.addProvider(CraftingRecipeProvider::new);
//Models
pack.addProvider(ModelProvider::new);
//Loot Tables
pack.addProvider(ArchaeologyLootProvider::new);
pack.addProvider(BlockLootProvider::new);
pack.addProvider(EntityLootProvider::new);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,21 @@
import com.kd8lvt.exclusionzone.block.FluidPipeBlock;
import com.kd8lvt.exclusionzone.registry.ModBlocks;
import com.kd8lvt.exclusionzone.registry.ModItems;
import com.kd8lvt.exclusionzone.registry.ModRegistries;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
import net.minecraft.data.client.*;
import net.minecraft.item.Item;
import net.minecraft.registry.entry.RegistryEntry;

public class ExclusionZoneModelGenerator extends FabricModelProvider {
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ModelProvider extends FabricModelProvider {

ItemModelGenerator itemGen;
public ExclusionZoneModelGenerator(FabricDataOutput output) {
public ModelProvider(FabricDataOutput output) {
super(output);
}

Expand All @@ -40,10 +46,12 @@ public void generateBlockStateModels(BlockStateModelGenerator blockStateModelGen
}
}

private static final ArrayList<String> alreadyGeneratedItems = new ArrayList<>(List.of("odd_seed"));

@Override
public void generateItemModels(ItemModelGenerator itemModelGenerator) {
itemGen = itemModelGenerator;
generated(ModItems.get("boy_doll"));
/*generated(ModItems.get("boy_doll"));
generated(ModItems.get("girl_doll"));
generated(ModItems.get("otherworldly_bone"));
generated(ModItems.get("chipped_carapace"));
Expand All @@ -59,17 +67,28 @@ public void generateItemModels(ItemModelGenerator itemModelGenerator) {
generated(ModItems.get("omen_of_caro_invictus"));
generated(ModItems.get("reinforced_handle"));
generated(ModItems.get("logging_axe_head"));
handheldRod(ModItems.get("glasscutter"));
handheldRod(ModItems.get("persona_monosword"));
itemGen.register(ModItems.get("logging_axe"),Models.HANDHELD);
generated(ModItems.get("magnet"));
generated(ModItems.get("magnet"));*/
handheldRod("glasscutter");
handheldRod("persona_monosword");
handheld("logging_axe");

for (Map.Entry<Item, RegistryEntry<Item>> entry : ModRegistries.ITEMS.ENTRIES_BY_VALUE.entrySet()) {
if (alreadyGeneratedItems.contains(entry.getValue().getKey().orElseThrow().getValue().getPath())) continue;
generated(entry.getKey());
}
}

public void generated(Item item) {
itemGen.register(item, Models.GENERATED);
}

public void handheldRod(Item item) {
itemGen.register(item,Models.HANDHELD_ROD);
public void handheldRod(String id) {
itemGen.register(ModItems.get(id),Models.HANDHELD_ROD);
alreadyGeneratedItems.add(id);
}

public void handheld(String id) {
itemGen.register(ModItems.get(id),Models.HANDHELD);
alreadyGeneratedItems.add(id);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.kd8lvt.exclusionzone.datagen;
package com.kd8lvt.exclusionzone.datagen.lang;

import com.kd8lvt.exclusionzone.item.BlockItemArtifact;
import com.kd8lvt.exclusionzone.item.base.IHasResearchNotes;
Expand All @@ -11,9 +11,9 @@

import java.util.concurrent.CompletableFuture;

public class ExclusionZoneEnglishProvider extends FabricLanguageProvider {
public class EnglishLangProvider extends FabricLanguageProvider {

protected ExclusionZoneEnglishProvider(FabricDataOutput dataOutput, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
public EnglishLangProvider(FabricDataOutput dataOutput, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(dataOutput, registryLookup);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.kd8lvt.exclusionzone.datagen.loot;

import com.kd8lvt.exclusionzone.registry.ModItems;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider;
import net.minecraft.loot.LootPool;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.context.LootContextTypes;
import net.minecraft.loot.entry.ItemEntry;
import net.minecraft.loot.provider.number.ConstantLootNumberProvider;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.util.Pair;

import java.util.ArrayList;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiConsumer;

public class ArchaeologyLootProvider extends SimpleFabricLootTableProvider {
public static final RegistryKey<LootTable> MOSS_LOOT = CommonLootValues.key("archaeology/wild_moss");
private static final ArrayList<Pair<String,Integer>> MOSS_LOOT_ITEMS = new ArrayList<>();
public ArchaeologyLootProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(output, registryLookup, LootContextTypes.ARCHAEOLOGY);
MOSS_LOOT_ITEMS.add(new Pair<>("otherworldly_bone",25));
MOSS_LOOT_ITEMS.add(new Pair<>("mysterious_chunk",25));
MOSS_LOOT_ITEMS.add(new Pair<>("warped_meat",15));
MOSS_LOOT_ITEMS.add(new Pair<>("quickmetal",20));
MOSS_LOOT_ITEMS.add(new Pair<>("odd_seed",20));
MOSS_LOOT_ITEMS.add(new Pair<>("chipped_carapace",20));
MOSS_LOOT_ITEMS.add(new Pair<>("hunk_of_amber",20));
}

@Override
public void accept(BiConsumer<RegistryKey<LootTable>, LootTable.Builder> biConsumer) {
LootPool.Builder mossPoolBuilder = LootPool.builder().rolls(ConstantLootNumberProvider.create(1f));
for (Pair<String,Integer> pair : MOSS_LOOT_ITEMS) {
mossPoolBuilder.with(ItemEntry.builder(ModItems.get(pair.getLeft())).weight(pair.getRight()));
}
biConsumer.accept(MOSS_LOOT,LootTable.builder().pool(mossPoolBuilder));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.kd8lvt.exclusionzone.datagen.loot;

import com.kd8lvt.exclusionzone.block.Enderweed;
import com.kd8lvt.exclusionzone.registry.ModBlocks;
import com.kd8lvt.exclusionzone.registry.ModItems;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider;
import net.minecraft.item.Items;
import net.minecraft.loot.LootPool;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.condition.LootCondition;
import net.minecraft.loot.entry.ItemEntry;
import net.minecraft.loot.provider.number.UniformLootNumberProvider;
import net.minecraft.registry.RegistryWrapper;

import java.util.concurrent.CompletableFuture;

public class BlockLootProvider extends FabricBlockLootTableProvider {
public BlockLootProvider(FabricDataOutput dataOutput, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(dataOutput, registryLookup);
}

@Override
public void generate() {
addDrop(ModBlocks.get("amber_block"), LootTable.builder().pool(LootPool.builder().rolls(UniformLootNumberProvider.create(4f,8f)).with(ItemEntry.builder(ModItems.get("hunk_of_amber")))));
addDrop(ModBlocks.get("mining_simulator"));
addDrop(ModBlocks.get("interaction_simulator"));
addDrop(ModBlocks.get("muffler"));
LootCondition.Builder enderweedGrown = CommonLootValues.Conditions.fullyGrown((Enderweed)ModBlocks.get("plant/enderweed"));
addDrop(ModBlocks.get("plant/enderweed"),
LootTable.builder()
.pool(LootPool.builder()
.with(ItemEntry.builder(ModItems.get("odd_seed"))) //Always drop one odd seed
.rolls(CommonLootValues.Numbers.ONE))
.pool(LootPool.builder() //if the block was fully grown, drop 1-4 ender pearls
.with(ItemEntry.builder(Items.ENDER_PEARL))
.rolls(CommonLootValues.Numbers.between(1,4))
.conditionally(enderweedGrown))
.pool(LootPool.builder() //if the block was fully grown, there is a 5% chance to drop an additional seed
.with(ItemEntry.builder(ModItems.get("odd_seed")))
.apply(CommonLootValues.Functions.setCount(1))
)
);
}
}
Loading

0 comments on commit 9b8cc20

Please sign in to comment.