Update upstream
This commit is contained in:
parent
d75383dc17
commit
db3f4cfe3c
|
@ -0,0 +1,17 @@
|
||||||
|
package io.izzel.arclight.common.mixin.bukkit;
|
||||||
|
|
||||||
|
import net.minecraft.world.item.CreativeModeTab;
|
||||||
|
import org.bukkit.craftbukkit.v.inventory.CraftCreativeCategory;
|
||||||
|
import org.bukkit.inventory.CreativeCategory;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Mutable;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Mixin(CraftCreativeCategory.class)
|
||||||
|
public class CraftCreativeCategoryMixin {
|
||||||
|
|
||||||
|
@Shadow @Final @Mutable private static Map<CreativeModeTab, CreativeCategory> NMS_TO_BUKKIT;
|
||||||
|
}
|
|
@ -241,6 +241,7 @@ public abstract class ServerPlayNetHandlerMixin implements ServerPlayNetHandlerB
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
s = event.getReason();
|
s = event.getReason();
|
||||||
|
ArclightCaptures.captureQuitMessage(s);
|
||||||
Component textComponent = CraftChatMessage.fromString(s, true)[0];
|
Component textComponent = CraftChatMessage.fromString(s, true)[0];
|
||||||
this.connection.send(new ClientboundDisconnectPacket(textComponent), future -> this.connection.disconnect(textComponent));
|
this.connection.send(new ClientboundDisconnectPacket(textComponent), future -> this.connection.disconnect(textComponent));
|
||||||
this.onDisconnect(textComponent);
|
this.onDisconnect(textComponent);
|
||||||
|
|
|
@ -191,7 +191,8 @@ public abstract class PlayerListMixin implements PlayerListBridge {
|
||||||
if (playerIn.inventoryMenu != playerIn.containerMenu) {
|
if (playerIn.inventoryMenu != playerIn.containerMenu) {
|
||||||
((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().closeInventory();
|
((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().closeInventory();
|
||||||
}
|
}
|
||||||
PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity(), "\u00A7e" + playerIn.getScoreboardName() + " left the game");
|
var quitMessage = ArclightCaptures.getQuitMessage();
|
||||||
|
PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity(), quitMessage != null ? quitMessage : "\u00A7e" + playerIn.getScoreboardName() + " left the game");
|
||||||
cserver.getPluginManager().callEvent(playerQuitEvent);
|
cserver.getPluginManager().callEvent(playerQuitEvent);
|
||||||
((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage());
|
((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage());
|
||||||
playerIn.doTick();
|
playerIn.doTick();
|
||||||
|
|
|
@ -3,6 +3,7 @@ package io.izzel.arclight.common.mixin.core.world.level.block;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.world.entity.projectile.Projectile;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.LevelReader;
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
|
@ -11,11 +12,15 @@ import net.minecraft.world.level.block.ChorusFlowerBlock;
|
||||||
import net.minecraft.world.level.block.ChorusPlantBlock;
|
import net.minecraft.world.level.block.ChorusPlantBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.properties.IntegerProperty;
|
import net.minecraft.world.level.block.state.properties.IntegerProperty;
|
||||||
|
import net.minecraft.world.phys.BlockHitResult;
|
||||||
import org.bukkit.craftbukkit.v.event.CraftEventFactory;
|
import org.bukkit.craftbukkit.v.event.CraftEventFactory;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Overwrite;
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
@ -109,4 +114,11 @@ public abstract class ChorusFlowerBlockMixin extends BlockMixin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(method = "onProjectileHit", cancellable = true, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;destroyBlock(Lnet/minecraft/core/BlockPos;ZLnet/minecraft/world/entity/Entity;)Z"))
|
||||||
|
private void arclight$hitByProjectile(Level p_51654_, BlockState p_51655_, BlockHitResult result, Projectile projectile, CallbackInfo ci) {
|
||||||
|
if (CraftEventFactory.callEntityChangeBlockEvent(projectile, result.getBlockPos(), Blocks.AIR.defaultBlockState()).isCancelled()) {
|
||||||
|
ci.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ import net.minecraft.stats.Stats;
|
||||||
import net.minecraft.world.effect.MobEffect;
|
import net.minecraft.world.effect.MobEffect;
|
||||||
import net.minecraft.world.entity.decoration.Motive;
|
import net.minecraft.world.entity.decoration.Motive;
|
||||||
import net.minecraft.world.entity.npc.VillagerProfession;
|
import net.minecraft.world.entity.npc.VillagerProfession;
|
||||||
|
import net.minecraft.world.item.CreativeModeTab;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
|
@ -41,21 +42,25 @@ import org.bukkit.World;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.craftbukkit.v.CraftCrashReport;
|
import org.bukkit.craftbukkit.v.CraftCrashReport;
|
||||||
import org.bukkit.craftbukkit.v.CraftStatistic;
|
import org.bukkit.craftbukkit.v.CraftStatistic;
|
||||||
|
import org.bukkit.craftbukkit.v.inventory.CraftCreativeCategory;
|
||||||
import org.bukkit.craftbukkit.v.util.CraftMagicNumbers;
|
import org.bukkit.craftbukkit.v.util.CraftMagicNumbers;
|
||||||
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
|
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
|
import org.bukkit.inventory.CreativeCategory;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
@SuppressWarnings({"ConstantConditions", "deprecation"})
|
@SuppressWarnings({"ConstantConditions", "deprecation"})
|
||||||
public class BukkitRegistry {
|
public class BukkitRegistry {
|
||||||
|
@ -90,6 +95,31 @@ public class BukkitRegistry {
|
||||||
loadBiomes();
|
loadBiomes();
|
||||||
loadArts();
|
loadArts();
|
||||||
loadStats();
|
loadStats();
|
||||||
|
loadCreativeTab();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void loadCreativeTab() {
|
||||||
|
var id = new AtomicInteger(CreativeCategory.values().length);
|
||||||
|
var newTypes = new ArrayList<CreativeCategory>();
|
||||||
|
var tabs = CreativeModeTab.TABS;
|
||||||
|
var map = new HashMap<CreativeModeTab, CreativeCategory>(Unsafe.getStatic(CraftCreativeCategory.class, "NMS_TO_BUKKIT"));
|
||||||
|
for (var tab : tabs) {
|
||||||
|
map.computeIfAbsent(tab, k -> {
|
||||||
|
var name = "MOD_" + k.getId();
|
||||||
|
var newTab = EnumHelper.makeEnum(CreativeCategory.class, name, id.getAndIncrement(), List.of(), List.of());
|
||||||
|
newTypes.add(newTab);
|
||||||
|
ArclightMod.LOGGER.debug("Registered {} as creative tab {}", k, newTab);
|
||||||
|
return newTab;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
EnumHelper.addEnums(CreativeCategory.class, newTypes);
|
||||||
|
try {
|
||||||
|
var field = CraftCreativeCategory.class.getDeclaredField("NMS_TO_BUKKIT");
|
||||||
|
field.setAccessible(true);
|
||||||
|
field.set(null, map);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void loadStats() {
|
private static void loadStats() {
|
||||||
|
|
|
@ -69,11 +69,7 @@ public class ArclightCaptures {
|
||||||
private static String quitMessage;
|
private static String quitMessage;
|
||||||
|
|
||||||
public static void captureQuitMessage(String quitMessage) {
|
public static void captureQuitMessage(String quitMessage) {
|
||||||
if (ArclightCaptures.quitMessage == null) {
|
ArclightCaptures.quitMessage = quitMessage;
|
||||||
ArclightCaptures.quitMessage = quitMessage;
|
|
||||||
} else {
|
|
||||||
recapture("quit message");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getQuitMessage() {
|
public static String getQuitMessage() {
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
"CraftBlockMixin",
|
"CraftBlockMixin",
|
||||||
"CraftBlockStateMixin",
|
"CraftBlockStateMixin",
|
||||||
"CraftConsoleCommandSenderMixin",
|
"CraftConsoleCommandSenderMixin",
|
||||||
|
"CraftCreativeCategoryMixin",
|
||||||
"CraftEntityMixin",
|
"CraftEntityMixin",
|
||||||
"CraftEventFactoryMixin",
|
"CraftEventFactoryMixin",
|
||||||
"CraftHumanEntityMixin",
|
"CraftHumanEntityMixin",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user