Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion SpongeAPI
Submodule SpongeAPI updated 23 files
+1 −1 gradle.properties
+3 −0 gradle/verification-metadata.xml
+2 −0 src/main/java/org/spongepowered/api/advancement/criteria/trigger/Triggers.java
+2 −0 src/main/java/org/spongepowered/api/block/BlockTypes.java
+2 −0 src/main/java/org/spongepowered/api/data/BlockStateKeys.java
+1 −1 src/main/java/org/spongepowered/api/data/type/CatTypes.java
+1 −1 src/main/java/org/spongepowered/api/data/type/ChickenVariants.java
+1 −1 src/main/java/org/spongepowered/api/data/type/CowVariants.java
+1 −1 src/main/java/org/spongepowered/api/data/type/FrogTypes.java
+1 −1 src/main/java/org/spongepowered/api/data/type/PigTypes.java
+1 −1 src/main/java/org/spongepowered/api/data/type/WolfSoundVariants.java
+58 −8 src/main/java/org/spongepowered/api/effect/sound/SoundTypes.java
+2 −0 src/main/java/org/spongepowered/api/effect/sound/music/MusicDiscs.java
+3 −0 src/main/java/org/spongepowered/api/entity/EntityTypes.java
+6 −0 src/main/java/org/spongepowered/api/entity/attribute/type/AttributeTypes.java
+36 −0 src/main/java/org/spongepowered/api/entity/living/animal/HappyGhast.java
+38 −0 src/main/java/org/spongepowered/api/item/ItemTypes.java
+4 −0 src/main/java/org/spongepowered/api/state/IntegerStateProperties.java
+2 −0 src/main/java/org/spongepowered/api/statistic/Statistics.java
+8 −2 src/main/java/org/spongepowered/api/tag/BlockTypeTags.java
+4 −0 src/main/java/org/spongepowered/api/tag/EntityTypeTags.java
+6 −0 src/main/java/org/spongepowered/api/tag/ItemTypeTags.java
+2 −0 src/main/java/org/spongepowered/api/world/gamerule/GameRules.java
5 changes: 4 additions & 1 deletion forge/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ description = "The SpongeAPI implementation for MinecraftForge"
version = spongeImpl.generatePlatformBuildVersionString(apiVersion, minecraftVersion, recommendedVersion, forgeVersion)

repositories {
maven("https://libraries.minecraft.net/") {
name = "Mojang"
}
maven("https://repo.spongepowered.org/repository/maven-public/") {
name = "sponge"
}
Expand Down Expand Up @@ -223,7 +226,7 @@ AWToAT.convert(awFiles, atFile)
val mixinConfigs: MutableSet<String> = spongeImpl.mixinConfigurations

extensions.configure(UserDevExtension::class) {
mappings("official", "1.21.5")
mappings("official", "1.21.6")
accessTransformers.from(atFile)
reobf = false

Expand Down
2 changes: 1 addition & 1 deletion forge/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ name=SpongeForge
implementation=Forge
description=The SpongeAPI implementation for MinecraftForge

forgeVersion=55.0.22
forgeVersion=56.0.2
mixinConfigs=mixins.spongeforge.accessors.json,mixins.spongeforge.api.json,mixins.spongeforge.inventory.json,mixins.spongeforge.inventory.shared.json,mixins.spongeforge.core.json,mixins.spongeforge.core.shared.json,mixins.spongeforge.tracker.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,7 @@
*/
package org.spongepowered.forge.launch.bridge.event;

import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.IEventBusInvokeDispatcher;
import net.minecraftforge.eventbus.api.IEventListener;
import net.minecraftforge.eventbus.internal.Event;
import org.checkerframework.checker.nullness.qual.Nullable;

import java.util.Collection;
Expand All @@ -46,14 +44,4 @@ public interface SpongeEventBridge_Forge {
return null;
}

/**
* If there is a specialist dispatcher that we need to use for
* this given event, it can be defined here.
*
* @return The dispatcher to use.
*/
default IEventBusInvokeDispatcher bridge$eventDispatcher() {
return IEventListener::invoke;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.kyori.adventure.text.Component;
import net.minecraft.commands.CommandSourceStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.CommandEvent;
import org.spongepowered.api.Game;
import org.spongepowered.api.command.CommandCause;
Expand Down Expand Up @@ -82,7 +81,7 @@ public CommandResult processCommand(final CommandCause cause, final CommandMappi

// Relocated from Commands (injection short circuits it there)
final CommandEvent event = new CommandEvent(parseResults);
if (MinecraftForge.EVENT_BUS.post(event)) {
if (CommandEvent.BUS.post(event)) {
if (event.getException() != null) {
Throwables.throwIfUnchecked(event.getException());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,134 +25,31 @@
package org.spongepowered.forge.launch.event;

import com.google.inject.Singleton;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.GenericEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.IEventBusInvokeDispatcher;
import net.minecraftforge.eventbus.api.IEventListener;
import org.checkerframework.checker.nullness.qual.Nullable;
import net.minecraftforge.common.EventBusMigrationHelper;
import net.minecraftforge.eventbus.internal.Event;
import org.spongepowered.common.event.manager.RegisteredListener;
import org.spongepowered.common.event.manager.SpongeEventManager;
import org.spongepowered.forge.launch.bridge.event.ForgeEventBridge_Forge;
import org.spongepowered.forge.launch.bridge.event.SpongeEventBridge_Forge;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;

@Singleton
public final class ForgeEventManager extends SpongeEventManager implements IEventBus {

private final IEventBus wrappedEventBus;

public ForgeEventManager(final IEventBus eventBus) {
this.wrappedEventBus = eventBus;
}

// IEventBus

@Override
public void register(final Object target) {
this.wrappedEventBus.register(target);
}

@Override
public <T extends Event> void addListener(final Consumer<T> consumer) {
this.wrappedEventBus.addListener(consumer);
}

@Override
public <T extends Event> void addListener(final EventPriority priority, final Consumer<T> consumer) {
this.wrappedEventBus.addListener(priority, consumer);
}

@Override
public <T extends Event> void addListener(final EventPriority priority, final boolean receiveCancelled, final Consumer<T> consumer) {
this.wrappedEventBus.addListener(priority, receiveCancelled, consumer);
}

@Override
public <T extends Event> void addListener(final EventPriority priority, final boolean receiveCancelled, final Class<T> eventType, final Consumer<T> consumer) {
this.wrappedEventBus.addListener(priority, receiveCancelled, eventType, consumer);
}

@Override
public <T extends GenericEvent<? extends F>, F> void addGenericListener(final Class<F> genericClassFilter, final Consumer<T> consumer) {
this.wrappedEventBus.addGenericListener(genericClassFilter, consumer);
}

@Override
public <T extends GenericEvent<? extends F>, F> void addGenericListener(final Class<F> genericClassFilter, final EventPriority priority,
final Consumer<T> consumer) {
this.wrappedEventBus.addGenericListener(genericClassFilter, priority, consumer);
}

@Override
public <T extends GenericEvent<? extends F>, F> void addGenericListener(final Class<F> genericClassFilter, final EventPriority priority,
final boolean receiveCancelled, final Consumer<T> consumer) {
this.wrappedEventBus.addGenericListener(genericClassFilter, priority, receiveCancelled, consumer);
}

@Override
public <T extends GenericEvent<? extends F>, F> void addGenericListener(final Class<F> genericClassFilter, final EventPriority priority,
final boolean receiveCancelled, final Class<T> eventType, final Consumer<T> consumer) {
this.wrappedEventBus.addGenericListener(genericClassFilter, priority, receiveCancelled, eventType, consumer);
}

@Override
public void unregister(final Object object) {
this.wrappedEventBus.unregister(object);
}

@Override
public boolean post(final Event event) {
return this.post(event, IEventListener::invoke);
}

@Override
public boolean post(final Event event, final IEventBusInvokeDispatcher wrapper) {
if (event instanceof ForgeEventBridge_Forge<?> forgeEvent) {
// intercept!
final org.spongepowered.api.event.@Nullable Event spongeEvent = forgeEvent.bridge$createSpongeEvent();
if (spongeEvent != null) {
return this.postDualBus(spongeEvent, Collections.singleton(event), wrapper);
}
}
// Do as Forge does - SpongeVanilla has no role to play here.
return this.wrappedEventBus.post(event, wrapper);
}

@Override
public void shutdown() {
this.wrappedEventBus.shutdown();
}

@Override
public void start() {
this.wrappedEventBus.start();
}

// EventManager
public final class ForgeEventManager extends SpongeEventManager {
private final EventBusMigrationHelper INSTANCE = EventBusMigrationHelper.INSTANCE;

@Override
public boolean post(final org.spongepowered.api.event.Event event) {
final SpongeEventBridge_Forge eventBridge = ((SpongeEventBridge_Forge) event);
final @Nullable Collection<? extends Event> forgeEvents = eventBridge.bridge$createForgeEvents();
if (forgeEvents == null || forgeEvents.isEmpty()) {
// Do as SpongeVanilla does - Forge has no role to play here.
return super.post(event);
}
return this.postDualBus(event, forgeEvents, eventBridge.bridge$eventDispatcher());
// final SpongeEventBridge_Forge eventBridge = ((SpongeEventBridge_Forge) event);
// final @Nullable Collection<? extends Event> forgeEvents = eventBridge.bridge$createForgeEvents();
return super.post(event);
}

// Implementation

@SuppressWarnings({"unchecked", "rawtypes"})
private boolean postDualBus(
final org.spongepowered.api.event.Event spongeEvent, final Collection<? extends Event> forgeEvents,
final IEventBusInvokeDispatcher dispatcher) {
final org.spongepowered.api.event.Event spongeEvent, final Collection<? extends Event> forgeEvents) {
try (final NoExceptionClosable ignored = this.preparePost(spongeEvent)) {
final RegisteredListener.Cache listeners = this.getHandlerCache(spongeEvent);
final List<RegisteredListener<?>> beforeModifications = listeners.beforeModifications();
Expand All @@ -167,7 +64,8 @@ private boolean postDualBus(
}
// Then, we fire all our Forge events
for (final Event forgeEvent : forgeEvents) {
this.wrappedEventBus.post(forgeEvent, dispatcher);

// INSTANCE.post(forgeEvent, dispatcher);
// We must sync back the event's changes, if there are any.
// For complex events, this will be a partial sync.
((ForgeEventBridge_Forge) forgeEvent).bridge$syncTo(spongeEvent);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
package org.spongepowered.forge.launch.inject;

import com.google.inject.AbstractModule;
import net.minecraftforge.common.MinecraftForge;
import org.spongepowered.api.Platform;
import org.spongepowered.api.event.EventManager;
import org.spongepowered.common.command.manager.SpongeCommandManager;
Expand All @@ -38,7 +37,7 @@ public final class SpongeForgeModule extends AbstractModule {
@Override
protected void configure() {
this.bind(Platform.class).to(ForgePlatform.class);
this.bind(EventManager.class).toProvider(() -> (ForgeEventManager) MinecraftForge.EVENT_BUS);
this.bind(EventManager.class).toProvider(ForgeEventManager::new);
this.bind(SpongeCommandManager.class).to(ForgeCommandManager.class);
}

Expand Down
Loading