Skip to content

Commit

Permalink
Merge branch '1.20.1' into 1.20.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Sollace committed Apr 26, 2024
2 parents a67935c + 68025e4 commit 2d28bed
Show file tree
Hide file tree
Showing 19 changed files with 107 additions and 33 deletions.
6 changes: 6 additions & 0 deletions src/main/java/com/minelittlepony/unicopia/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@ public class Config extends com.minelittlepony.common.util.settings.Config {
.addComment("whilst any ones left off are not permitted")
.addComment("An empty list disables whitelisting entirely.");

@Deprecated
public final Setting<Set<String>> wantItNeedItEntityExcludelist = value("server", "wantItNeedItEntityExcludelist", (Set<String>)new HashSet<>(Set.of("minecraft:creeper")))
.addComment("A list of entity types that are immune to the want it need it spell's effects");

@Deprecated
public final Setting<Set<String>> dimensionsWithoutAtmosphere = value("server", "dimensionsWithoutAtmosphere", (Set<String>)new HashSet<String>())
.addComment("A list of dimensions ids that do not have an atmosphere, and thus shouldn't allow pegasi to fly.");

Expand Down Expand Up @@ -66,4 +68,8 @@ public Config() {
.registerTypeAdapter(Race.class, RegistryTypeAdapter.of(Race.REGISTRY))
), GamePaths.getConfigDirectory().resolve("unicopia.json"));
}

public SyncedConfig toSynced() {
return new SyncedConfig(wantItNeedItEntityExcludelist.get(), dimensionsWithoutAtmosphere.get());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ default boolean hasFeatherTouch() {

static EquineContext of(ShapeContext context) {
if (context == ShapeContext.absent()) {
return InteractionManager.getInstance().getClientPony().map(EquineContext.class::cast).orElse(ABSENT);
return InteractionManager.getInstance().getEquineContext();
}
EquineContext result = context instanceof Container c ? c.get() : ABSENT;
return result == null ? ABSENT : result;
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/com/minelittlepony/unicopia/InteractionManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ public class InteractionManager {

private static InteractionManager INSTANCE = new InteractionManager();

@Nullable
private SyncedConfig config;

private EquineContext equineContext = EquineContext.ABSENT;

public static InteractionManager getInstance() {
return INSTANCE;
}
Expand Down Expand Up @@ -103,11 +108,30 @@ public void addBlockBreakingParticles(BlockPos pos, Direction direction) {

}

public void setEquineContext(EquineContext context) {
equineContext = context;
}

public EquineContext getEquineContext() {
return getClientPony().map(EquineContext.class::cast).orElse(equineContext);
}

public Optional<Pony> getClientPony() {
return Optional.empty();
}

public final Race getClientSpecies() {
return getClientPony().map(Pony::getSpecies).orElse(Race.HUMAN);
}

public void setSyncedConfig(SyncedConfig config) {
this.config = config;
}

public SyncedConfig getSyncedConfig() {
if (config == null) {
config = Unicopia.getConfig().toSynced();
}
return config;
}
}
8 changes: 8 additions & 0 deletions src/main/java/com/minelittlepony/unicopia/SyncedConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.minelittlepony.unicopia;

import java.util.Set;

public record SyncedConfig (
Set<String> wantItNeedItExcludeList,
Set<String> dimensionsWithoutAtmosphere) {
}
1 change: 0 additions & 1 deletion src/main/java/com/minelittlepony/unicopia/Unicopia.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.minelittlepony.unicopia.ability.Abilities;
import com.minelittlepony.unicopia.ability.data.tree.TreeTypeLoader;
import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType;
Expand Down
11 changes: 0 additions & 11 deletions src/main/java/com/minelittlepony/unicopia/block/JarBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,17 +84,6 @@ public void randomDisplayTick(BlockState state, World world, BlockPos pos, Rando
}
}

@Deprecated
@Override
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
super.onStateReplaced(state, world, pos, newState, moved);
}

@Override
public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) {
super.onBreak(world, pos, state, player);
}

@Override
public void onDestroyedByExplosion(World world, BlockPos pos, Explosion explosion) {
if (asItem() instanceof WeatherJarItem jar) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class CloudBedBlock extends FancyBedBlock implements CloudLike {
private final CloudBlock baseBlock;

public CloudBedBlock(String base, BlockState baseState, Settings settings) {
super(base, settings);
super(base, settings.dynamicBounds());
this.baseState = baseState;
this.baseBlock = (CloudBlock)baseState.getBlock();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public class CloudBlock extends Block implements CloudLike {
protected final boolean meltable;

public CloudBlock(Settings settings, boolean meltable) {
super((meltable ? settings.ticksRandomly() : settings).nonOpaque());
super((meltable ? settings.ticksRandomly() : settings).nonOpaque().dynamicBounds());
this.meltable = meltable;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public Optional<NamedScreenHandlerFactory> getFallback() {
};

public CloudChestBlock(Settings settings, BlockState baseState) {
super(settings, () -> UBlockEntities.CLOUD_CHEST);
super(settings.dynamicBounds(), () -> UBlockEntities.CLOUD_CHEST);
this.baseState = baseState;
this.baseBlock = (CloudBlock)baseState.getBlock();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class CloudDoorBlock extends DoorBlock implements CloudLike {
private final CloudBlock baseBlock;

public CloudDoorBlock(Settings settings, BlockState baseState, BlockSetType blockSet) {
super(settings, blockSet);
super(settings.dynamicBounds(), blockSet);
this.baseState = baseState;
this.baseBlock = (CloudBlock)baseState.getBlock();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class CloudStairsBlock extends StairsBlock implements CloudLike {
private final CloudBlock baseBlock;

public CloudStairsBlock(BlockState baseState, Settings settings) {
super(baseState, settings);
super(baseState, settings.dynamicBounds());
this.baseBlock = (CloudBlock)baseState.getBlock();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import com.minelittlepony.common.util.settings.Config;
import com.minelittlepony.common.util.settings.Setting;
import com.minelittlepony.unicopia.Config;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.network.Channel;
import com.minelittlepony.unicopia.network.MsgConfigurationChange;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.suggestion.SuggestionProvider;
Expand Down Expand Up @@ -36,10 +39,10 @@ private static LiteralArgumentBuilder<ServerCommandSource> createSet(String conf
return CommandManager.literal(configName)
.then(CommandManager.literal("clear").executes(source -> {
source.getSource().sendFeedback(() -> Text.translatable("command.unicopia.config.clear", configName), true);
return changeProperty(configName, values -> new HashSet<>());
return changeProperty(source.getSource(), configName, values -> new HashSet<>());
}))
.then(CommandManager.literal("add").then(
CommandManager.argument("id", IdentifierArgumentType.identifier()).suggests(suggestions).executes(source -> ConfigCommand.<Set<String>>changeProperty(configName, values -> {
CommandManager.argument("id", IdentifierArgumentType.identifier()).suggests(suggestions).executes(source -> ConfigCommand.<Set<String>>changeProperty(source.getSource(), configName, values -> {
String value = IdentifierArgumentType.getIdentifier(source, "id").toString();
source.getSource().sendFeedback(() -> Text.translatable("command.unicopia.config.add", value, configName), true);
values.add(value);
Expand All @@ -52,7 +55,7 @@ private static LiteralArgumentBuilder<ServerCommandSource> createSet(String conf
.map(Identifier::tryParse)
.filter(Objects::nonNull)
.toList(), builder);
}).executes(source -> ConfigCommand.<Set<String>>changeProperty(configName, values -> {
}).executes(source -> ConfigCommand.<Set<String>>changeProperty(source.getSource(), configName, values -> {
String value = IdentifierArgumentType.getIdentifier(source, "id").toString();
source.getSource().sendFeedback(() -> Text.translatable("command.unicopia.config.remove", value, configName), true);
values.remove(value);
Expand All @@ -73,11 +76,18 @@ private static <T> SuggestionProvider<ServerCommandSource> createSuggestion(Comm
return (context, builder) -> CommandSource.suggestIdentifiers(wrapper.streamKeys().map(RegistryKey::getValue), builder);
}

private static <T> int changeProperty(String configName, Function<T, T> changer) {
private static <T> int changeProperty(ServerCommandSource source, String configName, Function<T, T> changer) {
Config config = Unicopia.getConfig();
Setting<T> setting = config.getCategory("server").get(configName);
setting.set(changer.apply(setting.get()));
config.save();

MsgConfigurationChange msg = new MsgConfigurationChange(config.toSynced());
InteractionManager.getInstance().setSyncedConfig(msg.config());
source.getServer().getPlayerManager().getPlayerList().forEach(recipient -> {
Channel.CONFIGURATION_CHANGE.sendToPlayer(msg, recipient);
});

return 0;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import org.jetbrains.annotations.Nullable;

import com.minelittlepony.unicopia.Affinity;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.WeaklyOwned;
import com.minelittlepony.unicopia.ability.magic.*;
import com.minelittlepony.unicopia.ability.magic.spell.Spell;
Expand Down Expand Up @@ -147,7 +147,7 @@ public void initAi(GoalSelector goals, GoalSelector targets) {

DynamicTargetGoal targetter = new DynamicTargetGoal((MobEntity)entity);
targets.add(1, targetter);
if (!Unicopia.getConfig().wantItNeedItEntityExcludelist.get().contains(EntityType.getId(entity.getType()).toString())) {
if (!InteractionManager.getInstance().getSyncedConfig().wantItNeedItExcludeList().contains(EntityType.getId(entity.getType()).toString())) {
goals.add(1, new WantItTakeItGoal(this, targetter));
}
if (entity.getType().getSpawnGroup() == SpawnGroup.MONSTER) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ private FlightType recalculateFlightType() {
DimensionType dimension = entity.getWorld().getDimension();

if ((RegistryUtils.isIn(entity.getWorld(), dimension, RegistryKeys.DIMENSION_TYPE, UTags.DimensionTypes.HAS_NO_ATMOSPHERE)
|| Unicopia.getConfig().dimensionsWithoutAtmosphere.get().contains(RegistryUtils.getId(entity.getWorld(), dimension, RegistryKeys.DIMENSION_TYPE).toString()))
|| InteractionManager.getInstance().getSyncedConfig().dimensionsWithoutAtmosphere().contains(RegistryUtils.getId(entity.getWorld(), dimension, RegistryKeys.DIMENSION_TYPE).toString()))
&& !OxygenApi.API.get().hasOxygen(entity.getWorld(), entity.getBlockPos())) {
return FlightType.NONE;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package com.minelittlepony.unicopia.item;

import com.minelittlepony.unicopia.block.UBlocks;
import com.minelittlepony.unicopia.entity.IItemEntity;
import com.minelittlepony.unicopia.entity.ItemImpl;

import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.minecraft.block.Block;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LightningEntity;
Expand All @@ -24,8 +21,6 @@ public EmptyJarItem(Block block, Settings settings) {
public ActionResult onGroundTick(IItemEntity item) {
ItemEntity entity = item.get().asEntity();

BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(), UBlocks.CLOUD_JAR, UBlocks.STORM_JAR, UBlocks.LIGHTNING_JAR, UBlocks.ZAP_JAR);

entity.setInvulnerable(true);

if (!entity.getWorld().isClient
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
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;

import com.minelittlepony.unicopia.EquineContext;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.entity.player.Pony;

import net.minecraft.entity.Entity;
Expand Down Expand Up @@ -34,4 +37,13 @@ public void onRemove(ServerPlayerEntity player, CallbackInfo info) {
}
}

@Inject(method = "respawnPlayer", at = @At("HEAD"))
private void beforeRespawnPlayer(ServerPlayerEntity player, boolean alive, CallbackInfoReturnable<ServerPlayerEntity> info) {
InteractionManager.getInstance().setEquineContext(EquineContext.of(player));
}

@Inject(method = "respawnPlayer", at = @At("RETURN"))
private void afterRespawnPlayer(ServerPlayerEntity player, boolean alive, CallbackInfoReturnable<ServerPlayerEntity> info) {
InteractionManager.getInstance().setEquineContext(EquineContext.ABSENT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public interface Channel {
S2CPacketType<MsgOtherPlayerCapabilities> SERVER_OTHER_PLAYER_CAPABILITIES = SimpleNetworking.serverToClient(Unicopia.id("other_player_capabilities"), MsgOtherPlayerCapabilities::new);
S2CPacketType<MsgPlayerAnimationChange> SERVER_PLAYER_ANIMATION_CHANGE = SimpleNetworking.serverToClient(Unicopia.id("other_player_animation_change"), MsgPlayerAnimationChange::new);
S2CPacketType<MsgSkyAngle> SERVER_SKY_ANGLE = SimpleNetworking.serverToClient(Unicopia.id("sky_angle"), MsgSkyAngle::new);
S2CPacketType<MsgConfigurationChange> CONFIGURATION_CHANGE = SimpleNetworking.serverToClient(Unicopia.id("config"), MsgConfigurationChange::new);
S2CPacketType<MsgZapAppleStage> SERVER_ZAP_STAGE = SimpleNetworking.serverToClient(Unicopia.id("zap_stage"), MsgZapAppleStage::new);

static void bootstrap() {
Expand All @@ -53,8 +54,8 @@ static void bootstrap() {
}
sender.sendPacket(SERVER_RESOURCES.id(), new MsgServerResources().toBuffer());
sender.sendPacket(SERVER_SKY_ANGLE.id(), new MsgSkyAngle(UnicopiaWorldProperties.forWorld(handler.getPlayer().getServerWorld()).getTangentalSkyAngle()).toBuffer());
ZapAppleStageStore store = ZapAppleStageStore.get(handler.player.getServerWorld());
sender.sendPacket(SERVER_ZAP_STAGE.id(), new MsgZapAppleStage(store.getStage()).toBuffer());
sender.sendPacket(CONFIGURATION_CHANGE.id(), new MsgConfigurationChange(InteractionManager.getInstance().getSyncedConfig()).toBuffer());
sender.sendPacket(SERVER_ZAP_STAGE.id(), new MsgZapAppleStage(ZapAppleStageStore.get(handler.player.getServerWorld()).getStage()).toBuffer());
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.minelittlepony.unicopia.network;

import java.util.HashSet;

import com.minelittlepony.unicopia.SyncedConfig;
import com.sollace.fabwork.api.packets.Packet;

import net.minecraft.network.PacketByteBuf;

public record MsgConfigurationChange(SyncedConfig config) implements Packet {
public MsgConfigurationChange(PacketByteBuf buffer) {
this(new SyncedConfig(
buffer.readCollection(HashSet::new, PacketByteBuf::readString),
buffer.readCollection(HashSet::new, PacketByteBuf::readString)
));
}

@Override
public void toBuffer(PacketByteBuf buffer) {
buffer.writeCollection(config.wantItNeedItExcludeList(), PacketByteBuf::writeString);
buffer.writeCollection(config.dimensionsWithoutAtmosphere(), PacketByteBuf::writeString);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.Map;

import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.USounds;
import com.minelittlepony.unicopia.ability.data.Rot;
import com.minelittlepony.unicopia.ability.data.tree.TreeTypes;
Expand Down Expand Up @@ -35,6 +36,7 @@ public ClientNetworkHandlerImpl() {
Channel.SERVER_ZAP_STAGE.receiver().addPersistentListener(this::handleZapStage);
Channel.SERVER_PLAYER_ANIMATION_CHANGE.receiver().addPersistentListener(this::handlePlayerAnimation);
Channel.SERVER_REQUEST_PLAYER_LOOK.receiver().addPersistentListener(this::handleCasterLookRequest);
Channel.CONFIGURATION_CHANGE.receiver().addPersistentListener(this::handleConfigurationChange);
}

private void handleTribeScreen(PlayerEntity sender, MsgTribeSelect packet) {
Expand Down Expand Up @@ -93,4 +95,8 @@ private void handleCasterLookRequest(PlayerEntity sender, MsgCasterLookRequest p

Channel.CLIENT_CASTER_LOOK.sendToServer(new Reply(packet.spellId(), Rot.of(player)));
}

private void handleConfigurationChange(PlayerEntity sender, MsgConfigurationChange packet) {
InteractionManager.getInstance().setSyncedConfig(packet.config());
}
}

0 comments on commit 2d28bed

Please sign in to comment.