Skip to content

Commit

Permalink
Fixes #47, #48, #49, #51 and an issue with ReloadFakePlayers
Browse files Browse the repository at this point in the history
  • Loading branch information
senseiwells committed Aug 13, 2022
1 parent c4110f6 commit eedb325
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 46 deletions.
13 changes: 6 additions & 7 deletions src/main/java/essentialaddons/EssentialAddons.java
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,6 @@ public void onServerLoaded(MinecraftServer minecaraftServer) {
}
}

@Override
public void onServerLoadedWorlds(MinecraftServer server) {
if (EssentialSettings.reloadFakePlayers) {
ReloadFakePlayers.loadFakePlayers(server);
}
}

@Override
public void onServerClosed(MinecraftServer server) {
for (Config config : CONFIG_SET) {
Expand Down Expand Up @@ -120,4 +113,10 @@ public void registerCommands(CommandDispatcher<ServerCommandSource> dispatcher)
public void onPlayerLoggedIn(ServerPlayerEntity player) {
NETWORK_HANDLERS.forEach(networkHandler -> networkHandler.sayHello(player));
}

public static void onServerStarted(MinecraftServer server) {
if (EssentialSettings.reloadFakePlayers) {
ReloadFakePlayers.loadFakePlayers(server);
}
}
}
6 changes: 4 additions & 2 deletions src/main/java/essentialaddons/EssentialUtils.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package essentialaddons;

import carpet.CarpetServer;
import carpet.helpers.InventoryHelper;
import net.fabricmc.api.EnvType;
import essentialaddons.utils.Subscription;
Expand All @@ -24,12 +23,15 @@
import net.minecraft.world.World;

import java.nio.file.Path;
import java.util.Random;

import static essentialaddons.EssentialAddons.server;
import static net.minecraft.block.Block.dropStack;
import static net.minecraft.block.Block.getDroppedStacks;

public class EssentialUtils {
public static final Random RANDOM = new Random();

public static void sendToActionBar(ServerPlayerEntity playerEntity, String message) {
playerEntity.sendMessage(EssentialUtils.literal(message), true);
}
Expand Down Expand Up @@ -62,7 +64,7 @@ public static boolean placeItemInInventory(ServerPlayerEntity player, ItemStack
item = itemStack.getItem();
}
if (player.getInventory().insertStack(itemStack)) {
player.getWorld().playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2f, (CarpetServer.rand.nextFloat() - CarpetServer.rand.nextFloat()) * 1.4F + 2.0F);
player.getWorld().playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2f, (RANDOM.nextFloat() - RANDOM.nextFloat()) * 1.4F + 2.0F);
player.increaseStat(Stats.PICKED_UP.getOrCreateStat(item), itemAmount);
return true;
}
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/essentialaddons/feature/script/PacketEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package essentialaddons.feature.script;

import carpet.script.CarpetEventServer;
import carpet.script.value.Value;
import net.minecraft.server.network.ServerPlayerEntity;

import java.util.List;

public class PacketEvent extends CarpetEventServer.Event {
public static final PacketEvent EVENT = new PacketEvent();

private PacketEvent() {
super("script_packet", 2, true);
}

public void onScriptPacket(ServerPlayerEntity player, List<Value> values) {
this.handler.call(() -> values, player::getCommandSource);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package essentialaddons.feature.script;

import carpet.script.CarpetContext;
import carpet.script.CarpetEventServer;
import carpet.script.Expression;
import carpet.script.exception.InternalExpressionException;
import carpet.script.value.*;
Expand All @@ -25,13 +24,10 @@
import static essentialaddons.utils.NetworkUtils.*;

public class ScriptPacketHandler extends NetworkHandler {
private static final PacketEvent EVENT;

public static final ScriptPacketHandler INSTANCE = new ScriptPacketHandler();
public static final Identifier SCRIPT_HANDLER;

static {
EVENT = new PacketEvent();
SCRIPT_HANDLER = new Identifier("essentialclient", "clientscript");
}

Expand Down Expand Up @@ -88,17 +84,7 @@ public int getVersion() {
@Override
protected void processData(PacketByteBuf packetByteBuf, ServerPlayerEntity player) {
PacketParser parser = new PacketParser(packetByteBuf);
EVENT.onScriptPacket(player, List.of(EntityValue.of(player), parser.parseToValues()));
}

private static class PacketEvent extends CarpetEventServer.Event {
public PacketEvent() {
super("script_packet", 2, true);
}

public void onScriptPacket(ServerPlayerEntity player, List<Value> values) {
this.handler.call(() -> values, player::getCommandSource);
}
PacketEvent.EVENT.onScriptPacket(player, List.of(EntityValue.of(player), parser.parseToValues()));
}

private record PacketParser(PacketByteBuf buf) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(MinecraftServer.class)
Expand All @@ -17,4 +18,10 @@ private void onWorldsSaved(boolean suppressLogs, boolean bl, boolean bl2, Callba
config.saveConfig();
}
}

// For compatability with Voice Chat Mod
@Inject(method = "runServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;setupServer()Z", shift = At.Shift.AFTER))
private void onServerStartingLate(CallbackInfo ci) {
EssentialAddons.onServerStarted((MinecraftServer) (Object) this);
}
}
50 changes: 29 additions & 21 deletions src/main/java/essentialaddons/utils/ConfigFakePlayerData.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import carpet.patches.EntityPlayerMPFake;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import essentialaddons.EssentialAddons;
import essentialaddons.feature.ReloadFakePlayers;
import essentialaddons.mixins.reloadFakePlayers.ActionMixin;
import essentialaddons.mixins.reloadFakePlayers.EntityPlayerActionPackAccessor;
Expand Down Expand Up @@ -77,30 +78,37 @@ public void readConfig(JsonArray configData) { }

public void readConfig(MinecraftServer server) {
JsonArray totalPlayerData = this.getConfigData();
Set<UUID> loadedPlayers = new HashSet<>();
totalPlayerData.forEach(jsonElement -> {
JsonObject playerData = jsonElement.getAsJsonObject();
UUID playerUUID = UUID.fromString(playerData.get("uuid").getAsString());
String username = playerData.get("username").getAsString();
boolean isSneaking = playerData.get("sneaking").getAsBoolean();
boolean isSprinting = playerData.get("sprinting").getAsBoolean();
float forward = playerData.get("forward").getAsFloat();
float strafing = playerData.get("strafing").getAsFloat();
Map<ActionType, Action> actionMap = new TreeMap<>();
JsonArray playerActions = playerData.get("actions").getAsJsonArray();
playerActions.forEach(element -> {
JsonObject actionData = element.getAsJsonObject();
ActionType type = ActionType.valueOf(actionData.get("type").getAsString());
Action action = ActionMixin.init(
actionData.get("limit").getAsInt(),
actionData.get("interval").getAsInt(),
actionData.get("offset").getAsInt(),
actionData.get("continuous").getAsBoolean()
);
((ActionMixin) action).setCount(actionData.get("count").getAsInt());
((ActionMixin) action).setNext(actionData.get("next").getAsInt());
actionMap.put(type, action);
});
ReloadFakePlayers.loadPlayer(server, playerUUID, username, isSneaking, isSprinting, forward, strafing, actionMap);

if (!loadedPlayers.contains(playerUUID)) {
String username = playerData.get("username").getAsString();
boolean isSneaking = playerData.get("sneaking").getAsBoolean();
boolean isSprinting = playerData.get("sprinting").getAsBoolean();
float forward = playerData.get("forward").getAsFloat();
float strafing = playerData.get("strafing").getAsFloat();
Map<ActionType, Action> actionMap = new TreeMap<>();
JsonArray playerActions = playerData.get("actions").getAsJsonArray();
playerActions.forEach(element -> {
JsonObject actionData = element.getAsJsonObject();
ActionType type = ActionType.valueOf(actionData.get("type").getAsString());
Action action = ActionMixin.init(
actionData.get("limit").getAsInt(),
actionData.get("interval").getAsInt(),
actionData.get("offset").getAsInt(),
actionData.get("continuous").getAsBoolean()
);
((ActionMixin) action).setCount(actionData.get("count").getAsInt());
((ActionMixin) action).setNext(actionData.get("next").getAsInt());
actionMap.put(type, action);
});
loadedPlayers.add(playerUUID);
ReloadFakePlayers.loadPlayer(server, playerUUID, username, isSneaking, isSprinting, forward, strafing, actionMap);
} else {
EssentialAddons.LOGGER.warn("Tried to load duplicate player: {}", playerUUID);
}
});
}
}
4 changes: 3 additions & 1 deletion src/main/resources/essentialaddons.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@
"reloadFakePlayers.EntityPlayerActionPackAccessor",
"reloadFakePlayers.EntityPlayerMPFakeInvoker",
"reloadFakePlayers.EntityPlayerMPFakeMixin",
"reloadFakePlayers.IntegratedPlayerManagerMixin",
"removeWarnMismatchBlockPos.ServerPlayerInteractionManagerMixin",
"removeWarnRemovedEntity.EntityTrackerEntryMixin",
"shulkerSeption.ShulkerBoxSlotMixin",
Expand All @@ -64,6 +63,9 @@
"stackableShulkers.ItemStackMixin",
"stackableShulkers.ScreenHandlerMixin"
],
"client": [
"reloadFakePlayers.IntegratedPlayerManagerMixin"
],
"injectors": {
"defaultRequire": 1
}
Expand Down

0 comments on commit eedb325

Please # to comment.