Skip to content

Commit

Permalink
Initial update to 1.20.2-pre1
Browse files Browse the repository at this point in the history
  • Loading branch information
Patbox committed Nov 23, 2023
1 parent 3e34b52 commit 1515fb8
Show file tree
Hide file tree
Showing 42 changed files with 323 additions and 166 deletions.
12 changes: 6 additions & 6 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@ org.gradle.jvmargs=-Xmx1G

# Fabric Properties
# check these on https://fabricmc.net/use
minecraft_version=1.20.2
yarn_mappings=1.20.2+build.1
loader_version=0.14.22
minecraft_version=1.20.3-pre1
yarn_mappings=1.20.3-pre1+build.1
loader_version=0.14.24

#Fabric api
fabric_version=0.89.1+1.20.2
fabric_version=0.90.10+1.20.3

maven_group = eu.pb4

mod_version = 0.6.3
mod_version = 0.7.0-dev

minecraft_version_supported = ">=1.20.2-"
minecraft_version_supported = ">=1.20.3-"

packet_tweaker_version = 0.5.0+1.20.2-rc1
mixin_extras_version = 0.2.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@
import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;

import java.util.Collection;
import java.util.UUID;
import java.util.function.Supplier;

public interface ResourcePackDataProvider {
String getAddress();
String getHash();
boolean isReady();
JsonElement saveSettings();
void loadSettings(JsonElement settings);
Expand All @@ -25,8 +26,9 @@ static ResourcePackDataProvider getActive() {
static <T> void register(Identifier identifier, Supplier<ResourcePackDataProvider> providerCreator) {
AutoHost.TYPES.put(identifier, providerCreator);
};
Collection<MinecraftServer.ServerResourcePackProperties> getProperties();

default MinecraftServer.ServerResourcePackProperties getProperties() {
return new MinecraftServer.ServerResourcePackProperties(this.getAddress(), this.getHash(), AutoHost.config.require || PolymerResourcePackUtils.isRequired(), AutoHost.message);
static MinecraftServer.ServerResourcePackProperties createProperties(@Nullable UUID uuid, String address, @Nullable String hash) {
return new MinecraftServer.ServerResourcePackProperties(uuid, address, hash, AutoHost.config.require || PolymerResourcePackUtils.isRequired(), AutoHost.message);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,27 +89,31 @@ public void onInitialize() {
}

try {
AutoHost.message = Text.Serializer.fromJson(AutoHost.config.message);
AutoHost.message = Text.Serialization.fromJsonTree(AutoHost.config.message);
} catch (Exception e) {
AutoHost.message = null;
}

try {
AutoHost.disconnectMessage = Text.Serializer.fromJson(AutoHost.config.disconnectMessage);
AutoHost.disconnectMessage = Text.Serialization.fromJsonTree(AutoHost.config.disconnectMessage);
} catch (Exception e) {
AutoHost.disconnectMessage = Text.literal("This server requires resource pack enabled to play!");
}

CommonImplUtils.registerDevCommands((c) -> {
c.then(literal("reload_resourcepack").executes(context -> {
if (provider.isReady()) {
context.getSource().getPlayerOrThrow().networkHandler.sendPacket(new ResourcePackSendS2CPacket(provider.getAddress(), provider.getHash(), AutoHost.config.require || PolymerResourcePackUtils.isRequired(), AutoHost.message));
for (var x : provider.getProperties()) {
context.getSource().getPlayerOrThrow().networkHandler.sendPacket(new ResourcePackSendS2CPacket(x.id(), x.url(), x.hash(), AutoHost.config.require || PolymerResourcePackUtils.isRequired(), AutoHost.message));
}
}
return 0;
}));
c.then(literal("rebuild_reload_rp").executes(context -> {
generateAndCall(context.getSource().getServer(), context.getSource()::sendMessage, () -> {
context.getSource().getPlayer().networkHandler.sendPacket(new ResourcePackSendS2CPacket(provider.getAddress(), provider.getHash(), AutoHost.config.require || PolymerResourcePackUtils.isRequired(), AutoHost.message));
for (var x : provider.getProperties()) {
context.getSource().getPlayer().networkHandler.sendPacket(new ResourcePackSendS2CPacket(x.id(), x.url(), x.hash(), AutoHost.config.require || PolymerResourcePackUtils.isRequired(), AutoHost.message));
}
});
return 0;
}));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,15 @@
import com.google.gson.JsonObject;
import eu.pb4.polymer.autohost.api.ResourcePackDataProvider;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.Util;

import java.util.Collection;
import java.util.List;
import java.util.UUID;

public record EmptyProvider() implements ResourcePackDataProvider {
public static ResourcePackDataProvider INSTANCE = new EmptyProvider();

@Override
public String getAddress() {
return "";
}

@Override
public String getHash() {
return "";
}

@Override
public boolean isReady() {
return false;
Expand All @@ -34,6 +29,11 @@ public void loadSettings(JsonElement settings) {

}

@Override
public Collection<MinecraftServer.ServerResourcePackProperties> getProperties() {
return List.of();
}

@Override
public void serverStarted(MinecraftServer server) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.file.Files;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.Executors;

public class WebServerProvider implements ResourcePackDataProvider {
Expand Down Expand Up @@ -118,13 +121,8 @@ public void handle(HttpExchange exchange) throws IOException {
}

@Override
public String getAddress() {
return this.fullAddress;
}

@Override
public String getHash() {
return this.hash;
public Collection<MinecraftServer.ServerResourcePackProperties> getProperties() {
return List.of(ResourcePackDataProvider.createProperties(PolymerResourcePackUtils.getMainUuid(), this.fullAddress, this.hash));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,14 @@ public ServerConfigurationNetworkHandlerMixin(MinecraftServer server, ClientConn
super(server, connection, clientData);
}

@Shadow protected abstract void queueSendResourcePackTask();

@Shadow @Final private Queue<ServerPlayerConfigurationTask> tasks;

@Inject(method = "queueSendResourcePackTask", at = @At("HEAD"), cancellable = true)
@Inject(method = "queueSendResourcePackTask", at = @At("TAIL"))
private void polymerAutoHost$addTask(CallbackInfo ci) {
if (AutoHost.config.enabled && !PolymerCommonUtils.hasResourcePack(this.connection)) {
this.tasks.add(new SendResourcePackTask(AutoHost.provider.getProperties()));
ci.cancel();
if (AutoHost.config.enabled) {
for (var x : AutoHost.provider.getProperties()) {
this.tasks.add(new SendResourcePackTask(x));
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.network.ClientConnection;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerCommonNetworkHandler;
import net.minecraft.server.network.ServerPlayNetworkHandler;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.world.World;
Expand All @@ -20,6 +21,7 @@
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.UUID;

public final class PolymerCommonUtils {
private PolymerCommonUtils(){}
Expand Down Expand Up @@ -178,16 +180,16 @@ public static boolean isBedrockPlayer(GameProfile profile) {
return false;
}

public static boolean hasResourcePack(@Nullable ServerPlayerEntity player) {
public static boolean hasResourcePack(@Nullable ServerPlayerEntity player, UUID uuid) {
return CommonImpl.FORCE_RESOURCEPACK_ENABLED_STATE
|| (player != null && player.networkHandler != null && ((CommonClientConnectionExt) ((CommonNetworkHandlerExt) player.networkHandler)
.polymerCommon$getConnection()).polymerCommon$hasResourcePack())
.polymerCommon$getConnection()).polymerCommon$hasResourcePack(uuid))
|| (CommonImpl.IS_CLIENT && ClientUtils.isResourcePackLoaded());
}

public static boolean hasResourcePack(ClientConnection connection) {
public static boolean hasResourcePack(ClientConnection connection, UUID uuid) {
return CommonImpl.FORCE_RESOURCEPACK_ENABLED_STATE
|| ((CommonClientConnectionExt) connection).polymerCommon$hasResourcePack()
|| ((CommonClientConnectionExt) connection).polymerCommon$hasResourcePack(uuid)
|| (CommonImpl.IS_CLIENT && ClientUtils.isResourcePackLoaded());
}

Expand All @@ -199,11 +201,15 @@ public static boolean isServerBound() {
return true;
}

public static void setHasResourcePack(ServerPlayerEntity player, boolean status) {
((CommonClientConnectionExt) ((CommonNetworkHandlerExt) player.networkHandler).polymerCommon$getConnection()).polymerCommon$setResourcePack(status);
public static void setHasResourcePack(ServerPlayerEntity player, UUID uuid, boolean status) {
((CommonClientConnectionExt) ((CommonNetworkHandlerExt) player.networkHandler).polymerCommon$getConnection()).polymerCommon$setResourcePack(uuid, status);
}

public static void setHasResourcePack(ClientConnection player, UUID uuid, boolean status) {
((CommonClientConnectionExt) player).polymerCommon$setResourcePack(uuid, status);
}

public interface ResourcePackChangeCallback {
void onResourcePackChange(ServerPlayNetworkHandler handler, boolean oldStatus, boolean newStatus);
void onResourcePackChange(ServerCommonNetworkHandler handler, UUID uuid, boolean oldStatus, boolean newStatus);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import org.jetbrains.annotations.ApiStatus;

import java.util.UUID;

@ApiStatus.Internal
@SuppressWarnings({"unused"})
public interface CommonClientConnectionExt {
boolean polymerCommon$hasResourcePack();
boolean polymerCommon$hasResourcePack(UUID uuid);

void polymerCommon$setResourcePack(boolean value);
void polymerCommon$setResourcePackNoEvent(boolean value);
void polymerCommon$setResourcePack(UUID uuid, boolean value);
void polymerCommon$setResourcePackNoEvent(UUID uuid, boolean value);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import eu.pb4.polymer.common.impl.client.ClientUtils;
import io.netty.util.internal.shaded.org.jctools.util.UnsafeAccess;
import it.unimi.dsi.fastutil.Hash;
import me.lucko.fabric.api.permissions.v0.Permissions;
import net.minecraft.command.CommandRegistryAccess;
import net.minecraft.server.command.ServerCommandSource;
Expand All @@ -15,13 +16,26 @@

import javax.imageio.ImageIO;
import java.util.ArrayList;
import java.util.IdentityHashMap;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Predicate;

public class CommonImplUtils {
private static final ThreadLocal<ServerPlayerEntity> playerTargetHack = new ThreadLocal<>();

public static final Hash.Strategy<Object> IDENTITY_HASH = new Hash.Strategy<Object>() {
@Override
public int hashCode(Object o) {
return System.identityHashCode(o);
}

@Override
public boolean equals(Object a, Object b) {
return a == b;
}
};

@Nullable
public static ServerPlayerEntity getPlayer() {
return playerTargetHack.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@
import net.minecraft.world.event.GameEvent;
import net.minecraft.world.tick.OrderedTick;
import net.minecraft.world.tick.QueryableTickScheduler;
import net.minecraft.world.tick.Tick;
import net.minecraft.world.tick.TickManager;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -255,6 +257,8 @@ public int getTickCount() {
INSTANCE = worldUnsafe != null ? worldUnsafe : worldDefault;
}

private TickManager tickManager = new TickManager();

protected FakeWorld(MutableWorldProperties properties, RegistryKey<World> registryRef, RegistryEntry<DimensionType> dimensionType, Supplier<Profiler> profiler, boolean isClient, boolean debugWorld, long seed) {
super(properties, registryRef, REGISTRY_MANAGER, dimensionType, profiler, isClient, debugWorld, seed, 0);
}
Expand Down Expand Up @@ -295,6 +299,11 @@ public Entity getEntityById(int id) {
return null;
}

@Override
public TickManager getTickManager() {
return this.tickManager;
}

@Nullable
@Override
public MapState getMapState(String id) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.mojang.authlib.GameProfile;
import eu.pb4.polymer.common.impl.CommonImpl;
import eu.pb4.polymer.common.impl.CommonImplUtils;
import eu.pb4.polymer.common.impl.CompatStatus;
import eu.pb4.polymer.common.impl.FakeWorld;
import eu.pb4.polymer.common.mixin.DataTrackerAccessor;
Expand All @@ -28,7 +29,7 @@
@SuppressWarnings({"unused", "unchecked"})
public class InternalEntityHelpers {
private static final Map<EntityType<?>, @Nullable Entity> EXAMPLE_ENTITIES = new HashMap<>();
private static final Map<EntityType<?>, @Nullable Int2ObjectMap<DataTracker.Entry<?>>> TRACKED_DATA = new Object2ObjectOpenCustomHashMap<>(Util.identityHashStrategy());
private static final Map<EntityType<?>, @Nullable Int2ObjectMap<DataTracker.Entry<?>>> TRACKED_DATA = new Object2ObjectOpenCustomHashMap<>(CommonImplUtils.IDENTITY_HASH);

static {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import eu.pb4.polymer.common.api.PolymerCommonUtils;
import eu.pb4.polymer.common.impl.CommonClientConnectionExt;
import eu.pb4.polymer.common.impl.CommonImplUtils;
import it.unimi.dsi.fastutil.objects.Object2BooleanOpenHashMap;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.listener.PacketListener;
import net.minecraft.network.packet.c2s.common.ResourcePackStatusC2SPacket;
Expand All @@ -16,30 +17,31 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.UUID;

@Mixin(ClientConnection.class)
public abstract class ClientConnectionMixin implements CommonClientConnectionExt {
@Shadow @Nullable public abstract PacketListener getPacketListener();

@Unique
private boolean polymerCommon$hasResourcePack = false;
private final Object2BooleanOpenHashMap<UUID> polymerCommon$hasResourcePack = new Object2BooleanOpenHashMap<>();

@Override
public boolean polymerCommon$hasResourcePack() {
return this.polymerCommon$hasResourcePack;
public boolean polymerCommon$hasResourcePack(UUID uuid) {
return this.polymerCommon$hasResourcePack.getBoolean(uuid);
}

@Override
public void polymerCommon$setResourcePack(boolean value) {
var old = this.polymerCommon$hasResourcePack;
this.polymerCommon$hasResourcePack = value;
public void polymerCommon$setResourcePack(UUID uuid, boolean value) {
var old = this.polymerCommon$hasResourcePack.put(uuid, value);

if (this.getPacketListener() instanceof ServerPlayNetworkHandler handler) {
PolymerCommonUtils.ON_RESOURCE_PACK_STATUS_CHANGE.invoke(x -> x.onResourcePackChange(handler, old, value));
if (this.getPacketListener() instanceof ServerCommonNetworkHandler handler) {
PolymerCommonUtils.ON_RESOURCE_PACK_STATUS_CHANGE.invoke(x -> x.onResourcePackChange(handler, uuid, old, value));
}
}

@Override
public void polymerCommon$setResourcePackNoEvent(boolean value) {
this.polymerCommon$hasResourcePack = value;
public void polymerCommon$setResourcePackNoEvent(UUID uuid, boolean value) {
this.polymerCommon$hasResourcePack.put(uuid, value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ public abstract class ServerCommonNetworkHandlerMixin implements CommonNetworkHa

@Inject(method = "onResourcePackStatus", at = @At("TAIL"))
private void polymer$changeStatus(ResourcePackStatusC2SPacket packet, CallbackInfo ci) {
if (!CommonImplUtils.disableResourcePackCheck && packet.getStatus() != ResourcePackStatusC2SPacket.Status.ACCEPTED) {
if (!CommonImplUtils.disableResourcePackCheck) {
if (!this.polymerCommon$ignoreNextStatus) {
((CommonClientConnectionExt) this.connection).polymerCommon$setResourcePack(switch (packet.getStatus()) {
case SUCCESSFULLY_LOADED -> true;
case DECLINED, FAILED_DOWNLOAD, ACCEPTED -> false;
((CommonClientConnectionExt) this.connection).polymerCommon$setResourcePack(packet.id(), switch (packet.status()) {
case SUCCESSFULLY_LOADED, ACCEPTED -> true;
case DECLINED, FAILED_DOWNLOAD, INVALID_URL, FAILED_RELOAD, DISCARDED -> false;
});
}

Expand Down
Loading

0 comments on commit 1515fb8

Please sign in to comment.