Fix Automatic Event Subscriber not detecting mod id defaults, and fix test mods.

This commit is contained in:
LexManos 2020-04-26 16:49:37 -07:00
parent 8c8ef2d9e1
commit 3c5728f070
7 changed files with 61 additions and 56 deletions

View file

@ -32,6 +32,7 @@ import org.objectweb.asm.Type;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@ -46,6 +47,7 @@ public class AutomaticEventSubscriber
{
private static final Logger LOGGER = LogManager.getLogger();
private static final Type AUTO_SUBSCRIBER = Type.getType(Mod.EventBusSubscriber.class);
private static final Type MOD_TYPE = Type.getType(Mod.class);
public static void inject(final ModContainer mod, final ModFileScanData scanData, final ClassLoader loader)
{
if (scanData == null) return;
@ -53,6 +55,9 @@ public class AutomaticEventSubscriber
List<ModFileScanData.AnnotationData> ebsTargets = scanData.getAnnotations().stream().
filter(annotationData -> AUTO_SUBSCRIBER.equals(annotationData.getAnnotationType())).
collect(Collectors.toList());
Map<String, String> modids = scanData.getAnnotations().stream().
filter(annotationData -> MOD_TYPE.equals(annotationData.getAnnotationType())).
collect(Collectors.toMap(a -> a.getClassType().getClassName(), a -> (String)a.getAnnotationData().get("value")));
ebsTargets.forEach(ad -> {
@SuppressWarnings("unchecked")
@ -60,7 +65,7 @@ public class AutomaticEventSubscriber
getOrDefault("value", Arrays.asList(new ModAnnotation.EnumHolder(null, "CLIENT"), new ModAnnotation.EnumHolder(null, "DEDICATED_SERVER")));
final EnumSet<Dist> sides = sidesValue.stream().map(eh -> Dist.valueOf(eh.getValue())).
collect(Collectors.toCollection(() -> EnumSet.noneOf(Dist.class)));
final String modId = (String)ad.getAnnotationData().getOrDefault("modid", mod.getModId());
final String modId = (String)ad.getAnnotationData().getOrDefault("modid", modids.getOrDefault(ad.getClassType().getClassName(), mod.getModId()));
final ModAnnotation.EnumHolder busTargetHolder = (ModAnnotation.EnumHolder)ad.getAnnotationData().getOrDefault("bus", new ModAnnotation.EnumHolder(null, "FORGE"));
final Mod.EventBusSubscriber.Bus busTarget = Mod.EventBusSubscriber.Bus.valueOf(busTargetHolder.getValue());
if (Objects.equals(mod.getModId(), modId) && sides.contains(FMLEnvironment.dist)) {

View file

@ -109,15 +109,17 @@ public class DataGeneratorTest
{
static final String MODID = "data_gen_test";
private static final Gson GSON = new GsonBuilder()
private static Gson GSON = null;
@SubscribeEvent
public static void gatherData(GatherDataEvent event)
{
GSON = new GsonBuilder()
.registerTypeAdapter(Variant.class, new Variant.Deserializer())
.registerTypeAdapter(ItemCameraTransforms.class, new ItemCameraTransforms.Deserializer())
.registerTypeAdapter(ItemTransformVec3f.class, new ItemTransformVec3f.Deserializer())
.create();
@SubscribeEvent
public static void gatherData(GatherDataEvent event)
{
DataGenerator gen = event.getGenerator();
if (event.includeClient())

View file

@ -37,10 +37,12 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.event.world.PistonEvent;
import net.minecraftforge.event.world.PistonEvent.PistonMoveType;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.common.Mod;
/**
@ -77,9 +79,9 @@ public class PistonEventTest
{
World world = (World) event.getWorld();
PistonBlockStructureHelper pistonHelper = event.getStructureHelper();
if (world.isRemote)
PlayerEntity player = DistExecutor.callWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().player);
if (world.isRemote && player != null)
{
PlayerEntity player = Minecraft.getInstance().player;
if (pistonHelper.canMove())
{
player.sendMessage(new StringTextComponent(String.format("Piston will extend moving %d blocks and destroy %d blocks", pistonHelper.getBlocksToMove().size(), pistonHelper.getBlocksToDestroy().size())));
@ -118,9 +120,10 @@ public class PistonEventTest
else
{
boolean isSticky = event.getWorld().getBlockState(event.getPos()).getBlock() == Blocks.STICKY_PISTON;
if (event.getWorld().isRemote())
PlayerEntity player = DistExecutor.callWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().player);
if (event.getWorld().isRemote() && player != null)
{
PlayerEntity player = Minecraft.getInstance().player;
if (isSticky)
{
BlockPos targetPos = event.getFaceOffsetPos().offset(event.getDirection());

View file

@ -41,43 +41,47 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.ModelBakeEvent;
import net.minecraftforge.client.model.QuadTransformer;
import net.minecraftforge.client.model.data.EmptyModelData;
import net.minecraftforge.client.model.data.IDynamicBakedModel;
import net.minecraftforge.client.model.data.IModelData;
import net.minecraftforge.client.model.pipeline.BakedQuadBuilder;
import net.minecraftforge.client.model.pipeline.TRSRTransformer;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.model.TransformationHelper;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.ObjectHolder;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
@Mod(TRSRTransformerTest.MODID)
public class TRSRTransformerTest {
public static final String MODID = "trsr_transformer_test";
private static final DeferredRegister<Block> BLOCKS = new DeferredRegister<>(ForgeRegistries.BLOCKS, MODID);
private static final DeferredRegister<Item> ITEMS = new DeferredRegister<>(ForgeRegistries.ITEMS, MODID);
private static final RegistryObject<Block> TEST_BLOCK = BLOCKS.register("test", () -> new Block(Block.Properties.create(Material.ROCK)));
@SuppressWarnings("unused")
private static final RegistryObject<Item> TEST_ITEM = ITEMS.register("test", () -> new BlockItem(TEST_BLOCK.get(), new Item.Properties().group(ItemGroup.MISC)));
public TRSRTransformerTest() {
// Register ourselves for server and other game events we are interested in
MinecraftForge.EVENT_BUS.register(this);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake);
final IEventBus mod = FMLJavaModLoadingContext.get().getModEventBus();
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> mod.addListener(this::onModelBake));
BLOCKS.register(mod);
ITEMS.register(mod);
}
@SubscribeEvent
public void onModelBake(ModelBakeEvent e) {
for (ResourceLocation id : e.getModelRegistry().keySet()) {
if ("trsr_transformer_test".equals(id.getNamespace()) && "test".equals(id.getPath())) {
if (MODID.equals(id.getNamespace()) && "test".equals(id.getPath())) {
e.getModelRegistry().put(id, new MyBakedModel(e.getModelRegistry().get(id)));
}
}
}
public class MyBakedModel implements IDynamicBakedModel
{
public class MyBakedModel implements IDynamicBakedModel {
private final IBakedModel base;
public MyBakedModel(IBakedModel base) {
@ -104,12 +108,10 @@ public class TRSRTransformerTest {
quad.pipe(transformer);
quads.add(builder.build());
}
else
{
} /* else {
QuadTransformer qt = new QuadTransformer(trans);
quads.add(qt.processOne(quad));
}
}*/
}
return quads.build();
@ -145,20 +147,4 @@ public class TRSRTransformerTest {
return base.getOverrides();
}
}
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public static class RegistryEvents {
@ObjectHolder("trsr_transformer_test:test")
public static Block testblock;
@SubscribeEvent
public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
blockRegistryEvent.getRegistry().register(new Block(Block.Properties.create(Material.ROCK)).setRegistryName("trsr_transformer_test", "test"));
}
@SubscribeEvent
public static void onItemsRegistry(final RegistryEvent.Register<Item> itemRegistryEvent) {
itemRegistryEvent.getRegistry().register(new BlockItem(testblock, new Item.Properties().group(ItemGroup.MISC)).setRegistryName("trsr_transformer_test", "test"));
}
}
}

View file

@ -26,12 +26,14 @@ import net.minecraftforge.client.event.RenderNameplateEvent;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.api.distmarker.Dist;
@Mod("nameplate_render_test")
@Mod.EventBusSubscriber
@Mod(NameplateRenderingEventTest.MODID)
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class NameplateRenderingEventTest
{
public static final String MODID = "nameplate_render_test";
static final boolean ENABLED = false;
@SubscribeEvent

View file

@ -60,7 +60,8 @@ public class GravityAttributeTest
private static final AttributeModifier REDUCED_GRAVITY = (new AttributeModifier(REDUCED_GRAVITY_ID, "Reduced gravity", (double)-0.80, Operation.MULTIPLY_TOTAL)).setSaved(false);
public GravityAttributeTest() {
public GravityAttributeTest()
{
if (ENABLE)
{
MinecraftForge.EVENT_BUS.register(this);
@ -71,7 +72,7 @@ public class GravityAttributeTest
@SubscribeEvent
public void worldTick(TickEvent.WorldTickEvent event)
{
if (ENABLE && !event.world.isRemote)
if (!event.world.isRemote)
{
if (ticks++ > 60)
{

View file

@ -63,3 +63,9 @@ loaderVersion="[28,)"
modId="global_loot_test"
[[mods]]
modId="custom_plant_type_test"
[[dependencies.global_loot_test]]
modId="forge"
mandatory=true
versionRange="[1,)"
ordering="AFTER"
side="BOTH"