Compare commits

...

12 Commits

Author SHA1 Message Date
575b58a9b1 ChargeRecipe and TotemRecipe:
- assemble method returns a copy of the result item which fixes a bug where it gets replaced with air after being crafted once.
2022-11-03 20:26:13 +00:00
3f42bdf25d Fixed define method with Tag. 2022-11-03 20:17:48 +00:00
b5638bb783 Fixed diamond charge being wrong recipe type. 2022-11-03 20:17:03 +00:00
79525000b1 Removed unused MismatchedVersionException.java. 2022-11-03 20:16:11 +00:00
feff4a13e3 Fixed error caused by version update. 2022-11-03 18:54:49 +00:00
8169a1a344 Refactored the network package. 2022-11-03 18:54:23 +00:00
7e66d964c6 Moved Config into setup package. 2022-11-03 18:47:35 +00:00
80bc4f4d9e Added missing translation key. 2022-11-03 18:38:17 +00:00
c993cc2375 Refactored Proxy classes. 2022-11-03 18:37:18 +00:00
2b204e764b TotemOfReviving:
- Made proxy field private, created getter for it.
- Fixed typo.
- Removed unused stuff.
2022-11-03 17:53:10 +00:00
b128279fc5 Started updating to 1.18.2-2.0.2:
- Changed archivesBaseName.
- Updated mcVersion to 1.18.2.
- Updated buildVersion to 2.0.2.
- Updated forgeVersion to 40.1.84.
- Added logo file to mod.
- Updated mods.toml to reflect new forge version and logo file.
2022-11-03 17:48:45 +00:00
6398beb202 Excluded cache file. 2022-10-31 21:03:27 +00:00
28 changed files with 138 additions and 181 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@
/build/ /build/
/run/ /run/
/src/test/ /src/test/
/src/generated/resources/.cache/cache

View File

@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false org.gradle.daemon=false
group = dev.micle group = dev.micle
archivesBaseName = TotemOfReviving-Forge archivesBaseName = micles-totem-of-reviving-forge
modID = totemofreviving modID = totemofreviving
name = Micle's Totem of Reviving name = Micle's Totem of Reviving
author = Micle author = Micle
buildVersion = 2.0.1 buildVersion = 2.0.2
mcVersion = 1.18.1 mcVersion = 1.18.2
forgeVersion = 39.0.44 forgeVersion = 40.1.84
jeiVersion = 9.+ jeiVersion = 9.+

View File

@ -1,5 +1,5 @@
{ {
"type": "totemofreviving:totem_recipe", "type": "totemofreviving:charge_recipe",
"pattern": [ "pattern": [
"IDI", "IDI",
"PEP", "PEP",

View File

@ -1,5 +1,8 @@
package dev.micle.totemofreviving; package dev.micle.totemofreviving;
import dev.micle.totemofreviving.proxy.IProxy;
import dev.micle.totemofreviving.proxy.IProxy;
import dev.micle.totemofreviving.proxy.Proxy;
import dev.micle.totemofreviving.setup.ModItems; import dev.micle.totemofreviving.setup.ModItems;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTab;
@ -8,16 +11,12 @@ import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.ModContainer; import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Optional; import java.util.Optional;
import java.util.Random;
@Mod(TotemOfReviving.MOD_ID) @Mod(TotemOfReviving.MOD_ID)
public final class TotemOfReviving { public final class TotemOfReviving {
public static final String MOD_ID = "totemofreviving"; public static final String MOD_ID = "totemofreviving";
public static final String MOD_NAME = "Micle's Totem of Reviving";
public static final CreativeModeTab ITEM_GROUP = new CreativeModeTab(MOD_ID) { public static final CreativeModeTab ITEM_GROUP = new CreativeModeTab(MOD_ID) {
@Override @Override
public ItemStack makeIcon() { public ItemStack makeIcon() {
@ -25,22 +24,22 @@ public final class TotemOfReviving {
} }
}; };
public static final String RESOURCE_PREFIX = MOD_ID + ':'; private static IProxy proxy;
public static final Random RANDOM = new Random();
public static final Logger LOGGER = LogManager.getLogger(MOD_NAME);
public static TotemOfReviving INSTANCE;
public static ISideProxy PROXY;
public TotemOfReviving() { public TotemOfReviving() {
INSTANCE = this; proxy = DistExecutor.safeRunForDist(
PROXY = DistExecutor.safeRunForDist( () -> Proxy.Client::new,
() -> SideProxy.Client::new, () -> Proxy.Server::new
() -> SideProxy.Server::new
); );
} }
public static ResourceLocation createResourceLocation(String name) {
if (name.contains(":")) {
throw new IllegalArgumentException("Name contains namespace");
}
return new ResourceLocation(MOD_ID, name);
}
public static String getVersion() { public static String getVersion() {
Optional<? extends ModContainer> optional = ModList.get().getModContainerById(MOD_ID); Optional<? extends ModContainer> optional = ModList.get().getModContainerById(MOD_ID);
if (optional.isPresent()) { if (optional.isPresent()) {
@ -49,10 +48,7 @@ public final class TotemOfReviving {
return "0.0.0"; return "0.0.0";
} }
public static ResourceLocation createResourceLocation(String name) { public static IProxy getProxy() {
if (name.contains(":")) { return proxy;
throw new IllegalArgumentException("name containes namespace");
}
return new ResourceLocation(MOD_ID, name);
} }
} }

View File

@ -76,7 +76,7 @@ public class ModRecipeProvider extends RecipeProvider {
.pattern("NIN") .pattern("NIN")
.unlockedBy("has_item", has(ModItems.IRON_TOTEM.get())) .unlockedBy("has_item", has(ModItems.IRON_TOTEM.get()))
.save(consumer); .save(consumer);
ExtendedShapedRecipeBuilder.shaped(ModRecipes.TOTEM_RECIPE.get(), ModItems.DIAMOND_CHARGE.get()) ExtendedShapedRecipeBuilder.shaped(ModRecipes.CHARGE_RECIPE.get(), ModItems.DIAMOND_CHARGE.get())
.define('E', Items.EMERALD) .define('E', Items.EMERALD)
.define('D', Items.DIAMOND) .define('D', Items.DIAMOND)
.define('I', Items.IRON_INGOT) .define('I', Items.IRON_INGOT)

View File

@ -1,7 +1,7 @@
package dev.micle.totemofreviving.item.charge; package dev.micle.totemofreviving.item.charge;
import dev.micle.totemofreviving.TotemOfReviving; import dev.micle.totemofreviving.TotemOfReviving;
import dev.micle.totemofreviving.config.Config; import dev.micle.totemofreviving.setup.Config;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TextComponent;

View File

@ -28,6 +28,6 @@ public class ChargeRecipe extends ExtendedShapedRecipe {
@Override @Override
public ItemStack assemble(CraftingContainer inventory) { public ItemStack assemble(CraftingContainer inventory) {
return getBaseRecipe().getResultItem(); return getBaseRecipe().getResultItem().copy();
} }
} }

View File

@ -12,6 +12,7 @@ import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.FinishedRecipe;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.Tag; import net.minecraft.tags.Tag;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeSerializer;
@ -45,7 +46,7 @@ public class ExtendedShapedRecipeBuilder {
return new ExtendedShapedRecipeBuilder(serializer, result, count); return new ExtendedShapedRecipeBuilder(serializer, result, count);
} }
public ExtendedShapedRecipeBuilder define(Character symbol, Tag<Item> tagIn) { public ExtendedShapedRecipeBuilder define(Character symbol, TagKey<Item> tagIn) {
return this.define(symbol, Ingredient.of(tagIn)); return this.define(symbol, Ingredient.of(tagIn));
} }

View File

@ -28,6 +28,6 @@ public class TotemRecipe extends ExtendedShapedRecipe {
@Override @Override
public ItemStack assemble(CraftingContainer inventory) { public ItemStack assemble(CraftingContainer inventory) {
return getBaseRecipe().getResultItem(); return getBaseRecipe().getResultItem().copy();
} }
} }

View File

@ -1,6 +1,6 @@
package dev.micle.totemofreviving.item.totem; package dev.micle.totemofreviving.item.totem;
import dev.micle.totemofreviving.config.Config; import dev.micle.totemofreviving.setup.Config;
import dev.micle.totemofreviving.item.charge.DiamondChargeItem; import dev.micle.totemofreviving.item.charge.DiamondChargeItem;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity; import net.minecraft.world.item.Rarity;

View File

@ -1,6 +1,6 @@
package dev.micle.totemofreviving.item.totem; package dev.micle.totemofreviving.item.totem;
import dev.micle.totemofreviving.config.Config; import dev.micle.totemofreviving.setup.Config;
import dev.micle.totemofreviving.item.charge.IronChargeItem; import dev.micle.totemofreviving.item.charge.IronChargeItem;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;

View File

@ -1,6 +1,6 @@
package dev.micle.totemofreviving.item.totem; package dev.micle.totemofreviving.item.totem;
import dev.micle.totemofreviving.config.Config; import dev.micle.totemofreviving.setup.Config;
import dev.micle.totemofreviving.item.charge.NetheriteChargeItem; import dev.micle.totemofreviving.item.charge.NetheriteChargeItem;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity; import net.minecraft.world.item.Rarity;

View File

@ -1,6 +1,6 @@
package dev.micle.totemofreviving.item.totem; package dev.micle.totemofreviving.item.totem;
import dev.micle.totemofreviving.config.Config; import dev.micle.totemofreviving.setup.Config;
import dev.micle.totemofreviving.item.charge.StrawChargeItem; import dev.micle.totemofreviving.item.charge.StrawChargeItem;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity; import net.minecraft.world.item.Rarity;

View File

@ -1,11 +1,11 @@
package dev.micle.totemofreviving.item.totem; package dev.micle.totemofreviving.item.totem;
import dev.micle.totemofreviving.TotemOfReviving; import dev.micle.totemofreviving.TotemOfReviving;
import dev.micle.totemofreviving.config.Config; import dev.micle.totemofreviving.setup.Config;
import dev.micle.totemofreviving.network.ChangeTargetPacket; import dev.micle.totemofreviving.network.client.ChangeTargetPacket;
import dev.micle.totemofreviving.network.ChargeTotemPacket; import dev.micle.totemofreviving.network.client.ChargeTotemPacket;
import dev.micle.totemofreviving.network.Network; import dev.micle.totemofreviving.network.NetworkManager;
import dev.micle.totemofreviving.network.ReviveTargetPacket; import dev.micle.totemofreviving.network.client.ReviveTargetPacket;
import dev.micle.totemofreviving.setup.ModKeyMappings; import dev.micle.totemofreviving.setup.ModKeyMappings;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -214,12 +214,12 @@ public abstract class TotemItem extends Item {
ItemStack chargeItem = (hand.equals(InteractionHand.MAIN_HAND)) ? player.getOffhandItem() : player.getMainHandItem(); ItemStack chargeItem = (hand.equals(InteractionHand.MAIN_HAND)) ? player.getOffhandItem() : player.getMainHandItem();
if (player.isCrouching()) { if (player.isCrouching()) {
Network.channel.sendToServer(new ChangeTargetPacket(hand)); NetworkManager.getChannel().sendToServer(new ChangeTargetPacket(hand));
} else { } else {
if (isCharge(chargeItem)) { if (isCharge(chargeItem)) {
Network.channel.sendToServer(new ChargeTotemPacket(hand)); NetworkManager.getChannel().sendToServer(new ChargeTotemPacket(hand));
} else { } else {
Network.channel.sendToServer(new ReviveTargetPacket(hand)); NetworkManager.getChannel().sendToServer(new ReviveTargetPacket(hand));
} }
} }
return super.use(world, player, hand); return super.use(world, player, hand);

View File

@ -1,83 +0,0 @@
package dev.micle.totemofreviving.network;
import dev.micle.totemofreviving.TotemOfReviving;
import dev.micle.totemofreviving.util.MismatchedVersionException;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.simple.SimpleChannel;
import java.util.Objects;
import java.util.regex.Pattern;
public class Network {
public static final String VERSION = TotemOfReviving.MOD_ID + "-net-1";
private static final Pattern NET_VERSION_PATTERN = Pattern.compile(TotemOfReviving.MOD_ID + "-net-\\d+$");
private static final Pattern MOD_VERSION_PATTERN = Pattern.compile("Forge-\\d+\\.\\d+\\.\\d+-\\d+\\.\\d+\\.\\d+$");
public static SimpleChannel channel;
public static void init() {
channel = NetworkRegistry.ChannelBuilder.named(TotemOfReviving.createResourceLocation("network"))
.clientAcceptedVersions(s -> Objects.equals(s, VERSION))
.serverAcceptedVersions(s -> Objects.equals(s, VERSION))
.networkProtocolVersion(() -> VERSION)
.simpleChannel();
int id = 0;
channel.messageBuilder(ChangeTargetPacket.class, id++)
.encoder(ChangeTargetPacket::encode)
.decoder(ChangeTargetPacket::decode)
.consumer(ChangeTargetPacket::handle)
.add();
channel.messageBuilder(ChargeTotemPacket.class, id++)
.encoder(ChargeTotemPacket::encode)
.decoder(ChargeTotemPacket::decode)
.consumer(ChargeTotemPacket::handle)
.add();
channel.messageBuilder(ReviveTargetPacket.class, id++)
.encoder(ReviveTargetPacket::encode)
.decoder(ReviveTargetPacket::decode)
.consumer(ReviveTargetPacket::handle)
.add();
}
public static void writeVersionInfo(FriendlyByteBuf buffer, boolean senderIsServer) {
buffer.writeBoolean(senderIsServer);
buffer.writeUtf(VERSION);
buffer.writeUtf(TotemOfReviving.getVersion());
}
public static void checkVersion(FriendlyByteBuf buffer) {
boolean senderIsServer = buffer.readBoolean();
String serverNetVersion = (senderIsServer) ? readNetVersion(buffer) : VERSION;
String serverModVersion = (senderIsServer) ? readModVersion(buffer) : TotemOfReviving.getVersion();
String clientNetVersion = (senderIsServer) ? VERSION : readNetVersion(buffer);
String clientModVersion = (senderIsServer) ? TotemOfReviving.getVersion() : readModVersion(buffer);
if (!serverNetVersion.equals(clientNetVersion)) {
throw new MismatchedVersionException(
String.format("The server and client are running different versions of [Micle's Totem of Reviving]. " +
"Try updating this mod on either the client and or the server. " +
"Client version is %s (%s). Server version is %s (%s)",
clientModVersion, clientNetVersion,
serverModVersion, serverNetVersion)
);
}
}
public static String readNetVersion(FriendlyByteBuf buffer) {
String netVersion = buffer.readUtf();
if (!NET_VERSION_PATTERN.matcher(netVersion).matches()) {
return "UNKNOWN (" + netVersion + ")";
}
return netVersion;
}
public static String readModVersion(FriendlyByteBuf buffer) {
String modVersion = buffer.readUtf();
if (!modVersion.equals("NONE") && !MOD_VERSION_PATTERN.matcher(modVersion).matches()) {
return "UNKNOWN (" + modVersion + ")";
}
return modVersion;
}
}

View File

@ -0,0 +1,44 @@
package dev.micle.totemofreviving.network;
import dev.micle.totemofreviving.TotemOfReviving;
import dev.micle.totemofreviving.network.client.ChangeTargetPacket;
import dev.micle.totemofreviving.network.client.ChargeTotemPacket;
import dev.micle.totemofreviving.network.client.ReviveTargetPacket;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.simple.SimpleChannel;
public class NetworkManager {
// Initialize variables
private static SimpleChannel channel;
public static void init() {
// Create channel
channel = NetworkRegistry.ChannelBuilder.named(TotemOfReviving.createResourceLocation("network"))
.clientAcceptedVersions(v -> v.equals(TotemOfReviving.getVersion()))
.serverAcceptedVersions(v -> v.equals(TotemOfReviving.getVersion()))
.networkProtocolVersion(TotemOfReviving::getVersion)
.simpleChannel();
// Register packets
int id = 0;
channel.messageBuilder(ChangeTargetPacket.class, id++)
.encoder(ChangeTargetPacket::encode)
.decoder(ChangeTargetPacket::decode)
.consumer(ChangeTargetPacket::handle)
.add();
channel.messageBuilder(ChargeTotemPacket.class, id++)
.encoder(ChargeTotemPacket::encode)
.decoder(ChargeTotemPacket::decode)
.consumer(ChargeTotemPacket::handle)
.add();
channel.messageBuilder(ReviveTargetPacket.class, id++)
.encoder(ReviveTargetPacket::encode)
.decoder(ReviveTargetPacket::decode)
.consumer(ReviveTargetPacket::handle)
.add();
}
public static SimpleChannel getChannel() {
return channel;
}
}

View File

@ -1,7 +1,8 @@
package dev.micle.totemofreviving.network; package dev.micle.totemofreviving.network.client;
import dev.micle.totemofreviving.TotemOfReviving; import dev.micle.totemofreviving.TotemOfReviving;
import dev.micle.totemofreviving.item.totem.TotemItem; import dev.micle.totemofreviving.item.totem.TotemItem;
import dev.micle.totemofreviving.network.NetworkManager;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TextComponent;
@ -21,12 +22,10 @@ public class ChangeTargetPacket {
} }
public static void encode(final ChangeTargetPacket packet, final FriendlyByteBuf buffer) { public static void encode(final ChangeTargetPacket packet, final FriendlyByteBuf buffer) {
Network.writeVersionInfo(buffer, false);
buffer.writeEnum(packet.hand); buffer.writeEnum(packet.hand);
} }
public static ChangeTargetPacket decode(final FriendlyByteBuf buffer) { public static ChangeTargetPacket decode(final FriendlyByteBuf buffer) {
Network.checkVersion(buffer);
return new ChangeTargetPacket(buffer.readEnum(InteractionHand.class)); return new ChangeTargetPacket(buffer.readEnum(InteractionHand.class));
} }
@ -37,7 +36,7 @@ public class ChangeTargetPacket {
if (sender == null) { return; } if (sender == null) { return; }
ItemStack totemStack = sender.getItemInHand(packet.hand); ItemStack totemStack = sender.getItemInHand(packet.hand);
PlayerList playerList = TotemOfReviving.PROXY.getServer().getPlayerList(); PlayerList playerList = TotemOfReviving.getProxy().getServer().getPlayerList();
int targetIndex = TotemItem.getTargetIndex(totemStack) + 1; int targetIndex = TotemItem.getTargetIndex(totemStack) + 1;
if (targetIndex > playerList.getPlayerCount()-1) { targetIndex = 0; } if (targetIndex > playerList.getPlayerCount()-1) { targetIndex = 0; }

View File

@ -1,6 +1,7 @@
package dev.micle.totemofreviving.network; package dev.micle.totemofreviving.network.client;
import dev.micle.totemofreviving.item.totem.TotemItem; import dev.micle.totemofreviving.item.totem.TotemItem;
import dev.micle.totemofreviving.network.NetworkManager;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
@ -17,12 +18,10 @@ public class ChargeTotemPacket {
} }
public static void encode(final ChargeTotemPacket packet, final FriendlyByteBuf buffer) { public static void encode(final ChargeTotemPacket packet, final FriendlyByteBuf buffer) {
Network.writeVersionInfo(buffer, false);
buffer.writeEnum(packet.hand); buffer.writeEnum(packet.hand);
} }
public static ChargeTotemPacket decode(final FriendlyByteBuf buffer) { public static ChargeTotemPacket decode(final FriendlyByteBuf buffer) {
Network.checkVersion(buffer);
return new ChargeTotemPacket(buffer.readEnum(InteractionHand.class)); return new ChargeTotemPacket(buffer.readEnum(InteractionHand.class));
} }

View File

@ -1,7 +1,8 @@
package dev.micle.totemofreviving.network; package dev.micle.totemofreviving.network.client;
import dev.micle.totemofreviving.TotemOfReviving; import dev.micle.totemofreviving.TotemOfReviving;
import dev.micle.totemofreviving.item.totem.TotemItem; import dev.micle.totemofreviving.item.totem.TotemItem;
import dev.micle.totemofreviving.network.NetworkManager;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TextComponent;
@ -20,12 +21,10 @@ public class ReviveTargetPacket {
} }
public static void encode(final ReviveTargetPacket packet, final FriendlyByteBuf buffer) { public static void encode(final ReviveTargetPacket packet, final FriendlyByteBuf buffer) {
Network.writeVersionInfo(buffer, false);
buffer.writeEnum(packet.hand); buffer.writeEnum(packet.hand);
} }
public static ReviveTargetPacket decode(final FriendlyByteBuf buffer) { public static ReviveTargetPacket decode(final FriendlyByteBuf buffer) {
Network.checkVersion(buffer);
return new ReviveTargetPacket(buffer.readEnum(InteractionHand.class)); return new ReviveTargetPacket(buffer.readEnum(InteractionHand.class));
} }
@ -39,7 +38,7 @@ public class ReviveTargetPacket {
ServerPlayer target; ServerPlayer target;
try { try {
target = TotemOfReviving.PROXY.getServer().getPlayerList().getPlayer(TotemItem.getTargetUUID(totemStack)); target = TotemOfReviving.getProxy().getServer().getPlayerList().getPlayer(TotemItem.getTargetUUID(totemStack));
if (target == null) { throw new NullPointerException("Target is null!"); } if (target == null) { throw new NullPointerException("Target is null!"); }
} catch (NullPointerException exception) { } catch (NullPointerException exception) {
sender.sendMessage(new TextComponent(ChatFormatting.WHITE + "Unable to find player!"), sender.getUUID()); sender.sendMessage(new TextComponent(ChatFormatting.WHITE + "Unable to find player!"), sender.getUUID());

View File

@ -1,13 +1,11 @@
package dev.micle.totemofreviving; package dev.micle.totemofreviving.proxy;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
public interface ISideProxy { public interface IProxy {
MinecraftServer getServer(); MinecraftServer getServer();
Player getClientPlayer(); Player getClientPlayer();
Level getClientWorld(); Level getClientWorld();
} }

View File

@ -1,8 +1,8 @@
package dev.micle.totemofreviving; package dev.micle.totemofreviving.proxy;
import dev.micle.totemofreviving.config.Config; import dev.micle.totemofreviving.setup.Config;
import dev.micle.totemofreviving.data.DataGenerators; import dev.micle.totemofreviving.data.DataGenerators;
import dev.micle.totemofreviving.network.Network; import dev.micle.totemofreviving.network.NetworkManager;
import dev.micle.totemofreviving.setup.Registration; import dev.micle.totemofreviving.setup.Registration;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
@ -18,24 +18,28 @@ import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.event.lifecycle.*; import net.minecraftforge.fml.event.lifecycle.*;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
class SideProxy implements ISideProxy { public class Proxy implements IProxy {
// Initialize variables
private static MinecraftServer server = null; private static MinecraftServer server = null;
// Common setup // Common setup
SideProxy() { public Proxy() {
// Initialize setup
Registration.register(); Registration.register();
Config.init(); Config.init();
Network.init(); NetworkManager.init();
// Register mod event bus listeners
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
modEventBus.addListener(DataGenerators::gatherData); modEventBus.addListener(DataGenerators::gatherData);
modEventBus.addListener(SideProxy::setup); modEventBus.addListener(Proxy::setup);
modEventBus.addListener(SideProxy::imcEnqueue); modEventBus.addListener(Proxy::imcEnqueue);
modEventBus.addListener(SideProxy::imcProcess); modEventBus.addListener(Proxy::imcProcess);
MinecraftForge.EVENT_BUS.addListener(SideProxy::onAddReloadListeners); // Register event bus listeners
MinecraftForge.EVENT_BUS.addListener(SideProxy::serverStarted); MinecraftForge.EVENT_BUS.addListener(Proxy::onAddReloadListeners);
MinecraftForge.EVENT_BUS.addListener(SideProxy::serverStopping); MinecraftForge.EVENT_BUS.addListener(Proxy::serverStarted);
MinecraftForge.EVENT_BUS.addListener(Proxy::serverStopping);
} }
private static void setup(FMLCommonSetupEvent event) {} private static void setup(FMLCommonSetupEvent event) {}
@ -70,10 +74,12 @@ class SideProxy implements ISideProxy {
} }
// Client setup // Client setup
static class Client extends SideProxy { public static class Client extends Proxy {
Client() { public Client() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(Client::setup); // Register mod event bus listeners
FMLJavaModLoadingContext.get().getModEventBus().addListener(Client::postSetup); IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
modEventBus.addListener(Client::setup);
modEventBus.addListener(Client::postSetup);
} }
private static void setup(FMLClientSetupEvent event) {} private static void setup(FMLClientSetupEvent event) {}
@ -94,9 +100,11 @@ class SideProxy implements ISideProxy {
} }
// Server setup // Server setup
static class Server extends SideProxy { public static class Server extends Proxy {
Server() { public Server() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(Server::setup); // Register mod event bus listeners
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
modEventBus.addListener(Server::setup);
} }
private static void setup(FMLDedicatedServerSetupEvent event) {} private static void setup(FMLDedicatedServerSetupEvent event) {}

View File

@ -1,4 +1,4 @@
package dev.micle.totemofreviving.config; package dev.micle.totemofreviving.setup;
import dev.micle.totemofreviving.item.totem.DiamondTotemItem; import dev.micle.totemofreviving.item.totem.DiamondTotemItem;
import dev.micle.totemofreviving.item.totem.IronTotemItem; import dev.micle.totemofreviving.item.totem.IronTotemItem;

View File

@ -5,5 +5,5 @@ import net.minecraft.client.KeyMapping;
public class ModKeyMappings { public class ModKeyMappings {
public static final KeyMapping ADVANCED_TOOLTIP = public static final KeyMapping ADVANCED_TOOLTIP =
new KeyMapping("advanced_tooltip", InputConstants.KEY_LSHIFT, KeyMapping.CATEGORY_INVENTORY); new KeyMapping("advanced_tooltips", InputConstants.KEY_LSHIFT, KeyMapping.CATEGORY_INVENTORY);
} }

View File

@ -11,6 +11,7 @@ import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.IForgeRegistryEntry; import net.minecraftforge.registries.IForgeRegistryEntry;
public class Registration { public class Registration {
// Initialize variables
public static final DeferredRegister<Item> ITEMS = create(ForgeRegistries.ITEMS); public static final DeferredRegister<Item> ITEMS = create(ForgeRegistries.ITEMS);
public static final DeferredRegister<RecipeSerializer<?>> RECIPE_SERIALIZERS = create(ForgeRegistries.RECIPE_SERIALIZERS); public static final DeferredRegister<RecipeSerializer<?>> RECIPE_SERIALIZERS = create(ForgeRegistries.RECIPE_SERIALIZERS);

View File

@ -1,7 +0,0 @@
package dev.micle.totemofreviving.util;
public class MismatchedVersionException extends RuntimeException {
public MismatchedVersionException(String msg) {
super(msg);
}
}

View File

@ -6,7 +6,7 @@
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
modLoader = "javafml" #mandatory modLoader = "javafml" #mandatory
# A version range to match for said mod loader - for regular FML @Mod it will be the forge version # A version range to match for said mod loader - for regular FML @Mod it will be the forge version
loaderVersion = "[39,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. loaderVersion = "[40,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions.
# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. # The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties.
# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. # Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here.
license = "All Rights Reserved" license = "All Rights Reserved"
@ -27,7 +27,7 @@ displayName = "Micle's Totem of Reviving" #mandatory
# A URL for the "homepage" for this mod, displayed in the mod UI # A URL for the "homepage" for this mod, displayed in the mod UI
#displayURL="http://example.com/" #optional #displayURL="http://example.com/" #optional
# A file name (in the root of the mod JAR) containing a logo for display # A file name (in the root of the mod JAR) containing a logo for display
#logoFile="totemofreviving.png" #optional logoFile="logo.jpg" #optional
# A text field displayed in the mod UI # A text field displayed in the mod UI
#credits="Thanks for this example mod goes to Java" #optional #credits="Thanks for this example mod goes to Java" #optional
# A text field displayed in the mod UI # A text field displayed in the mod UI
@ -43,7 +43,7 @@ Mod for reviving players in a hardcore world.
# Does this dependency have to exist - if not, ordering below must be specified # Does this dependency have to exist - if not, ordering below must be specified
mandatory = true #mandatory mandatory = true #mandatory
# The version range of the dependency # The version range of the dependency
versionRange = "[39,)" #mandatory versionRange = "[40,)" #mandatory
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
ordering = "NONE" ordering = "NONE"
# Side this dependency is applied on - BOTH, CLIENT or SERVER # Side this dependency is applied on - BOTH, CLIENT or SERVER
@ -53,6 +53,6 @@ Mod for reviving players in a hardcore world.
modId = "minecraft" modId = "minecraft"
mandatory = true mandatory = true
# This version range declares a minimum of the current minecraft version up to but not including the next major version # This version range declares a minimum of the current minecraft version up to but not including the next major version
versionRange = "[1.18.1,1.19)" versionRange = "[1.18.2,1.19)"
ordering = "NONE" ordering = "NONE"
side = "BOTH" side = "BOTH"

View File

@ -7,5 +7,6 @@
"item.totemofreviving.straw_charge": "Straw reviving charge", "item.totemofreviving.straw_charge": "Straw reviving charge",
"item.totemofreviving.iron_charge": "Iron reviving charge", "item.totemofreviving.iron_charge": "Iron reviving charge",
"item.totemofreviving.diamond_charge": "Diamond reviving charge", "item.totemofreviving.diamond_charge": "Diamond reviving charge",
"item.totemofreviving.netherite_charge": "Netherite reviving charge" "item.totemofreviving.netherite_charge": "Netherite reviving charge",
"advanced_tooltips": "advanced_tooltips"
} }

BIN
src/main/resources/logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB