add: a registry for mimicked entity types
This commit is contained in:
6 files changed
+73
-37
No files matched your search
@@ -3,7 +3,6 @@ package io.ib67.sfcraft;
|
|||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.inject.*;
|
import com.google.inject.*;
|
||||||
import io.ib67.sfcraft.entity.SomeCustomAllayEntity;
|
|
||||||
import io.ib67.sfcraft.module.*;
|
import io.ib67.sfcraft.module.*;
|
||||||
import io.ib67.sfcraft.module.chat.ChatPingModule;
|
import io.ib67.sfcraft.module.chat.ChatPingModule;
|
||||||
import io.ib67.sfcraft.module.chat.ChatSendLocModule;
|
import io.ib67.sfcraft.module.chat.ChatSendLocModule;
|
||||||
@@ -17,26 +16,11 @@ import io.ib67.sfcraft.inject.MinecraftServerSupplier;
|
|||||||
import io.ib67.sfcraft.registry.event.RandomEventRegistry;
|
import io.ib67.sfcraft.registry.event.RandomEventRegistry;
|
||||||
import io.ib67.sfcraft.module.command.BackModule;
|
import io.ib67.sfcraft.module.command.BackModule;
|
||||||
import io.ib67.sfcraft.module.command.ManagementModule;
|
import io.ib67.sfcraft.module.command.ManagementModule;
|
||||||
import lombok.SneakyThrows;
|
|
||||||
import lombok.extern.log4j.Log4j2;
|
import lombok.extern.log4j.Log4j2;
|
||||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
|
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
|
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
|
||||||
import net.minecraft.entity.EntityType;
|
|
||||||
import net.minecraft.entity.SpawnGroup;
|
|
||||||
import net.minecraft.registry.Registries;
|
|
||||||
import net.minecraft.registry.Registry;
|
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
|
|
||||||
@Log4j2
|
@Log4j2
|
||||||
public class SFCraftInitializer extends GuiceModInitializer {
|
public class SFCraftInitializer extends GuiceModInitializer {
|
||||||
public static final EntityType<SomeCustomAllayEntity> ALLAY = Registry.register(
|
|
||||||
Registries.ENTITY_TYPE,
|
|
||||||
Identifier.of("sfcraft", "allay"),
|
|
||||||
FabricEntityTypeBuilder.create(SpawnGroup.CREATURE, SomeCustomAllayEntity::new).build()
|
|
||||||
);
|
|
||||||
@Override
|
@Override
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
super.configure();
|
super.configure();
|
||||||
@@ -72,19 +56,14 @@ public class SFCraftInitializer extends GuiceModInitializer {
|
|||||||
protected void onReady(MinecraftServer minecraftServer) {
|
protected void onReady(MinecraftServer minecraftServer) {
|
||||||
log.info("SFCraft is loading");
|
log.info("SFCraft is loading");
|
||||||
SFCraft.server = minecraftServer;
|
SFCraft.server = minecraftServer;
|
||||||
SFCraft.injector = getInjector();
|
|
||||||
getModuleManager().switchGlobalState(Lifecycle.State.ENABLED);
|
getModuleManager().switchGlobalState(Lifecycle.State.ENABLED);
|
||||||
test();
|
|
||||||
log.info("Load completed! " + getModuleManager().getModules().size() + " modules were loaded.");
|
log.info("Load completed! " + getModuleManager().getModules().size() + " modules were loaded.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void test() {
|
|
||||||
FabricDefaultAttributeRegistry.register(ALLAY,SomeCustomAllayEntity.createAllayAttributes().build());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Injector onInit() {
|
protected Injector onInit() {
|
||||||
return Guice.createInjector(
|
SFEntityType.registerEntities();
|
||||||
|
return SFCraft.injector = Guice.createInjector(
|
||||||
new SFCraft(),
|
new SFCraft(),
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package io.ib67.sfcraft;
|
||||||
|
|
||||||
|
import io.ib67.sfcraft.entity.SFGuiderEntity;
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
|
||||||
|
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
|
import net.minecraft.entity.LivingEntity;
|
||||||
|
import net.minecraft.entity.SpawnGroup;
|
||||||
|
import net.minecraft.entity.attribute.DefaultAttributeContainer;
|
||||||
|
import net.minecraft.registry.Registries;
|
||||||
|
import net.minecraft.registry.Registry;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
@Log4j2
|
||||||
|
public class SFEntityType {
|
||||||
|
public final EntityType<SFGuiderEntity> GUIDER = Registry.register(
|
||||||
|
Registries.ENTITY_TYPE,
|
||||||
|
Identifier.of("sfcraft", "guider"),
|
||||||
|
FabricEntityTypeBuilder.create(SpawnGroup.CREATURE, SFGuiderEntity::new).build()
|
||||||
|
);
|
||||||
|
private static SFEntityType registry;
|
||||||
|
private final Map<EntityType<?>, EntityType<?>> mappedEntityTypes = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
private void init() {
|
||||||
|
register(GUIDER, EntityType.ALLAY, SFGuiderEntity.createAllayAttributes().build());
|
||||||
|
}
|
||||||
|
|
||||||
|
private <A extends LivingEntity, B extends LivingEntity> void register(EntityType<B> custom, EntityType<A> origin, DefaultAttributeContainer attr) {
|
||||||
|
FabricDefaultAttributeRegistry.register(custom, attr);
|
||||||
|
mappedEntityTypes.put(custom, origin);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void registerEntities() {
|
||||||
|
registry = new SFEntityType();
|
||||||
|
registry.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends LivingEntity> EntityType<T> mapToVanilla(EntityType<?> type) {
|
||||||
|
return (EntityType<T>) registry.mappedEntityTypes.getOrDefault(type, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-9
@@ -1,22 +1,15 @@
|
|||||||
package io.ib67.sfcraft.entity;
|
package io.ib67.sfcraft.entity;
|
||||||
|
|
||||||
import io.ib67.sfcraft.SFCraftInitializer;
|
|
||||||
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
|
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
|
||||||
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
|
|
||||||
import net.minecraft.entity.EntityDimensions;
|
|
||||||
import net.minecraft.entity.EntityType;
|
import net.minecraft.entity.EntityType;
|
||||||
import net.minecraft.entity.SpawnGroup;
|
|
||||||
import net.minecraft.entity.passive.AllayEntity;
|
import net.minecraft.entity.passive.AllayEntity;
|
||||||
import net.minecraft.registry.Registries;
|
|
||||||
import net.minecraft.registry.Registry;
|
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.server.world.ServerWorld;
|
import net.minecraft.server.world.ServerWorld;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class SomeCustomAllayEntity extends AllayEntity {
|
public class SFGuiderEntity extends AllayEntity {
|
||||||
public SomeCustomAllayEntity(EntityType<SomeCustomAllayEntity> entityEntityType, World world) {
|
public SFGuiderEntity(EntityType<SFGuiderEntity> entityEntityType, World world) {
|
||||||
super(entityEntityType, world);
|
super(entityEntityType, world);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package io.ib67.sfcraft.mixin.server.hack;
|
package io.ib67.sfcraft.mixin.server.hack;
|
||||||
|
|
||||||
import io.ib67.sfcraft.SFCraftInitializer;
|
import io.ib67.sfcraft.SFCraftInitializer;
|
||||||
|
import io.ib67.sfcraft.SFEntityType;
|
||||||
import net.minecraft.entity.EntityType;
|
import net.minecraft.entity.EntityType;
|
||||||
import net.minecraft.network.packet.s2c.play.EntitySpawnS2CPacket;
|
import net.minecraft.network.packet.s2c.play.EntitySpawnS2CPacket;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
@@ -11,9 +12,6 @@ import org.spongepowered.asm.mixin.injection.ModifyArg;
|
|||||||
public class EntitySpawnS2CPacketMixin {
|
public class EntitySpawnS2CPacketMixin {
|
||||||
@ModifyArg(method = "write", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/codec/PacketCodec;encode(Ljava/lang/Object;Ljava/lang/Object;)V"), index = 1)
|
@ModifyArg(method = "write", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/codec/PacketCodec;encode(Ljava/lang/Object;Ljava/lang/Object;)V"), index = 1)
|
||||||
public Object mapModType(Object type) {
|
public Object mapModType(Object type) {
|
||||||
if (type == SFCraftInitializer.ALLAY) {
|
return SFEntityType.mapToVanilla((EntityType<?>) type);
|
||||||
return EntityType.ALLAY;
|
|
||||||
}
|
|
||||||
return type;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package io.ib67.sfcraft.mixin.server.hack;
|
||||||
|
|
||||||
|
import io.ib67.sfcraft.SFCraftInitializer;
|
||||||
|
import io.ib67.sfcraft.SFEntityType;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
|
import net.minecraft.text.HoverEvent;
|
||||||
|
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.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
@Mixin(HoverEvent.EntityContent.class)
|
||||||
|
public class HoverEntityContentMixin {
|
||||||
|
@Inject(method = "method_54198", at = @At("HEAD"), cancellable = true)
|
||||||
|
private static void sf$mapToVanilla(HoverEvent.EntityContent content, CallbackInfoReturnable<EntityType> cir) {
|
||||||
|
cir.setReturnValue(SFEntityType.mapToVanilla(content.entityType));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,7 +24,8 @@
|
|||||||
"server.bridge.ServerWorldBridge",
|
"server.bridge.ServerWorldBridge",
|
||||||
"server.fixes.EndermanEntityMixin$ChaseGoalMixin",
|
"server.fixes.EndermanEntityMixin$ChaseGoalMixin",
|
||||||
"server.hack.EntitySpawnS2CPacketMixin",
|
"server.hack.EntitySpawnS2CPacketMixin",
|
||||||
"server.hack.RegistryHandlerMixin"
|
"server.hack.RegistryHandlerMixin",
|
||||||
|
"server.hack.HoverEntityContentMixin"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|||||||
Reference in new issue
Block a user