Skip to content

Commit

Permalink
Full code of WSCommands
Browse files Browse the repository at this point in the history
  • Loading branch information
acewins727 committed Oct 18, 2024
1 parent 3514198 commit 40dd6a3
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 88 deletions.
81 changes: 44 additions & 37 deletions java/net/acewins/wscommands/WscommandsMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,73 +3,80 @@
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

import net.minecraftforge.network.simple.SimpleChannel;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.fml.util.thread.SidedThreadGroups;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.common.MinecraftForge;
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
import net.neoforged.neoforge.network.handling.IPayloadHandler;
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
import net.neoforged.neoforge.event.tick.ServerTickEvent;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.fml.util.thread.SidedThreadGroups;
import net.neoforged.fml.common.Mod;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.bus.api.IEventBus;

import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Tuple;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.FriendlyByteBuf;

import java.util.function.Supplier;
import java.util.function.Function;
import java.util.function.BiConsumer;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.Map;
import java.util.List;
import java.util.HashMap;
import java.util.Collection;
import java.util.ArrayList;
import java.util.AbstractMap;

@Mod("wscommands")
public class WscommandsMod {
public static final Logger LOGGER = LogManager.getLogger(WscommandsMod.class);
public static final String MODID = "wscommands";

public WscommandsMod() {
public WscommandsMod(IEventBus modEventBus) {
// Start of user code block mod constructor
// End of user code block mod constructor
MinecraftForge.EVENT_BUS.register(this);
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
NeoForge.EVENT_BUS.register(this);
modEventBus.addListener(this::registerNetworking);

// Start of user code block mod init
// End of user code block mod init
}

// Start of user code block mod methods
// End of user code block mod methods
private static final String PROTOCOL_VERSION = "1";
public static final SimpleChannel PACKET_HANDLER = NetworkRegistry.newSimpleChannel(new ResourceLocation(MODID, MODID), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, clientVersion -> true);
private static int messageID = 0;
private static boolean networkingRegistered = false;
private static final Map<CustomPacketPayload.Type<?>, NetworkMessage<?>> MESSAGES = new HashMap<>();

public static <T> void addNetworkMessage(Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, BiConsumer<T, Supplier<NetworkEvent.Context>> messageConsumer) {
PACKET_HANDLER.registerMessage(messageID, messageType, encoder, decoder, messageConsumer);
messageID++;
private record NetworkMessage<T extends CustomPacketPayload>(StreamCodec<? extends FriendlyByteBuf, T> reader, IPayloadHandler<T> handler) {
}

private static final Collection<AbstractMap.SimpleEntry<Runnable, Integer>> workQueue = new ConcurrentLinkedQueue<>();
public static <T extends CustomPacketPayload> void addNetworkMessage(CustomPacketPayload.Type<T> id, StreamCodec<? extends FriendlyByteBuf, T> reader, IPayloadHandler<T> handler) {
if (networkingRegistered)
throw new IllegalStateException("Cannot register new network messages after networking has been registered");
MESSAGES.put(id, new NetworkMessage<>(reader, handler));
}

@SuppressWarnings({"rawtypes", "unchecked"})
private void registerNetworking(final RegisterPayloadHandlersEvent event) {
final PayloadRegistrar registrar = event.registrar(MODID);
MESSAGES.forEach((id, networkMessage) -> registrar.playBidirectional(id, ((NetworkMessage) networkMessage).reader(), ((NetworkMessage) networkMessage).handler()));
networkingRegistered = true;
}

private static final Collection<Tuple<Runnable, Integer>> workQueue = new ConcurrentLinkedQueue<>();

public static void queueServerWork(int tick, Runnable action) {
if (Thread.currentThread().getThreadGroup() == SidedThreadGroups.SERVER)
workQueue.add(new AbstractMap.SimpleEntry<>(action, tick));
workQueue.add(new Tuple<>(action, tick));
}

@SubscribeEvent
public void tick(TickEvent.ServerTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
List<AbstractMap.SimpleEntry<Runnable, Integer>> actions = new ArrayList<>();
workQueue.forEach(work -> {
work.setValue(work.getValue() - 1);
if (work.getValue() == 0)
actions.add(work);
});
actions.forEach(e -> e.getKey().run());
workQueue.removeAll(actions);
}
public void tick(ServerTickEvent.Post event) {
List<Tuple<Runnable, Integer>> actions = new ArrayList<>();
workQueue.forEach(work -> {
work.setB(work.getB() - 1);
if (work.getB() == 0)
actions.add(work);
});
actions.forEach(e -> e.getA().run());
workQueue.removeAll(actions);
}
}
10 changes: 5 additions & 5 deletions java/net/acewins/wscommands/command/WSCCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@

import org.checkerframework.checker.units.qual.s;

import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.common.util.FakePlayerFactory;
import net.neoforged.neoforge.event.RegisterCommandsEvent;
import net.neoforged.neoforge.common.util.FakePlayerFactory;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.bus.api.SubscribeEvent;

import net.minecraft.world.level.Level;
import net.minecraft.world.entity.Entity;
Expand All @@ -18,7 +18,7 @@
import net.acewins.wscommands.procedures.ResetProcedure;
import net.acewins.wscommands.procedures.ForceRunProcedure;

@Mod.EventBusSubscriber
@EventBusSubscriber
public class WSCCommand {
@SubscribeEvent
public static void registerCommand(RegisterCommandsEvent event) {
Expand Down
43 changes: 23 additions & 20 deletions java/net/acewins/wscommands/procedures/AddWorldProcedure.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package net.acewins.wscommands.procedures;

import net.minecraftforge.fml.loading.FMLPaths;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
import net.neoforged.fml.loading.FMLPaths;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.bus.api.Event;

import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.entity.Entity;
Expand All @@ -14,7 +14,7 @@
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.CommandSource;
import net.minecraft.advancements.AdvancementProgress;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementHolder;

import javax.annotation.Nullable;

Expand All @@ -23,7 +23,7 @@
import java.io.File;
import java.io.BufferedReader;

@Mod.EventBusSubscriber
@EventBusSubscriber
public class AddWorldProcedure {
@SubscribeEvent
public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
Expand Down Expand Up @@ -53,15 +53,16 @@ private static void execute(@Nullable Event event, LevelAccessor world, Entity e
bufferedReader.close();
commands = new com.google.gson.Gson().fromJson(jsonstringbuilder.toString(), com.google.gson.JsonObject.class);
if (commands.get("DedicatedMode").getAsBoolean()) {
if (!(entity instanceof ServerPlayer _plr3 && _plr3.level() instanceof ServerLevel
&& _plr3.getAdvancements().getOrStartProgress(_plr3.server.getAdvancements().getAdvancement(new ResourceLocation("wscommands:new_world"))).isDone())) {
if (!(entity instanceof ServerPlayer _plr3 && _plr3.level() instanceof ServerLevel && _plr3.getAdvancements().getOrStartProgress(_plr3.server.getAdvancements().get(new ResourceLocation("wscommands:new_world"))).isDone())) {
if (!commands.get("Repeat").getAsBoolean()) {
if (entity instanceof ServerPlayer _player) {
Advancement _adv = _player.server.getAdvancements().getAdvancement(new ResourceLocation("wscommands:new_world"));
AdvancementProgress _ap = _player.getAdvancements().getOrStartProgress(_adv);
if (!_ap.isDone()) {
for (String criteria : _ap.getRemainingCriteria())
_player.getAdvancements().award(_adv, criteria);
AdvancementHolder _adv = _player.server.getAdvancements().get(new ResourceLocation("wscommands:new_world"));
if (_adv != null) {
AdvancementProgress _ap = _player.getAdvancements().getOrStartProgress(_adv);
if (!_ap.isDone()) {
for (String criteria : _ap.getRemainingCriteria())
_player.getAdvancements().award(_adv, criteria);
}
}
}
}
Expand All @@ -79,14 +80,16 @@ private static void execute(@Nullable Event event, LevelAccessor world, Entity e
} else {
if (world.players().size() == 1) {
if (!(entity instanceof ServerPlayer _plr10 && _plr10.level() instanceof ServerLevel
&& _plr10.getAdvancements().getOrStartProgress(_plr10.server.getAdvancements().getAdvancement(new ResourceLocation("wscommands:new_world"))).isDone())) {
&& _plr10.getAdvancements().getOrStartProgress(_plr10.server.getAdvancements().get(new ResourceLocation("wscommands:new_world"))).isDone())) {
if (!commands.get("Repeat").getAsBoolean()) {
if (entity instanceof ServerPlayer _player) {
Advancement _adv = _player.server.getAdvancements().getAdvancement(new ResourceLocation("wscommands:new_world"));
AdvancementProgress _ap = _player.getAdvancements().getOrStartProgress(_adv);
if (!_ap.isDone()) {
for (String criteria : _ap.getRemainingCriteria())
_player.getAdvancements().award(_adv, criteria);
AdvancementHolder _adv = _player.server.getAdvancements().get(new ResourceLocation("wscommands:new_world"));
if (_adv != null) {
AdvancementProgress _ap = _player.getAdvancements().getOrStartProgress(_adv);
if (!_ap.isDone()) {
for (String criteria : _ap.getRemainingCriteria())
_player.getAdvancements().award(_adv, criteria);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package net.acewins.wscommands.procedures;

import net.minecraftforge.fml.loading.FMLPaths;
import net.neoforged.fml.loading.FMLPaths;

import net.minecraft.world.entity.Entity;
import net.minecraft.server.level.ServerLevel;
Expand Down
12 changes: 6 additions & 6 deletions java/net/acewins/wscommands/procedures/ModLoadProcedure.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package net.acewins.wscommands.procedures;

import net.minecraftforge.fml.loading.FMLPaths;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.eventbus.api.Event;
import net.neoforged.fml.loading.FMLPaths;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.bus.api.Event;

import javax.annotation.Nullable;

import java.io.IOException;
import java.io.FileWriter;
import java.io.File;

@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD)
public class ModLoadProcedure {
@SubscribeEvent
public static void init(FMLCommonSetupEvent event) {
Expand Down
2 changes: 1 addition & 1 deletion resources/META-INF/mods.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ license="GNU GPLv3"

[[mods]]
modId="wscommands"
version="1.0.3"
version="1.0.4"
displayName="World Start Commands and Global Configs"
displayURL="https://mcreator.net"
credits="Created using mod maker MCreator - https://mcreator.net/about"
Expand Down
2 changes: 1 addition & 1 deletion resources/META-INF/neoforge.mods.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ license="GNU GPLv3"

[[mods]]
modId="wscommands"
version="1.0.2"
version="1.0.4"
displayName="World Start Commands and Global Configs"
displayURL="https://mcreator.net"
credits="Created using mod maker MCreator - https://mcreator.net/about"
Expand Down
16 changes: 0 additions & 16 deletions resources/data/wscommands/advancements/new_world.json
Original file line number Diff line number Diff line change
@@ -1,20 +1,4 @@
{
"display": {
"background": "minecraft:textures/block/stone.png",
"icon": {
"item": "minecraft:dirt"
},
"title": {
"translate": "advancements.new_world.title"
},
"description": {
"translate": "advancements.new_world.descr"
},
"frame": "task",
"show_toast": false,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"new_world_0": {
"trigger": "minecraft:impossible"
Expand Down
2 changes: 1 addition & 1 deletion resources/pack.mcmeta
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"pack": {
"pack_format": 15,
"pack_format": 41,
"description": "Runs commands on world creation!"
}
}

0 comments on commit 40dd6a3

Please sign in to comment.