Skip to content

Commit

Permalink
Fixed #340
Browse files Browse the repository at this point in the history
  • Loading branch information
Mgazul committed Oct 30, 2024
1 parent 92320c5 commit 732889a
Showing 1 changed file with 27 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.mohistmc.banner.mixin.world.level.block;

import java.util.concurrent.atomic.AtomicInteger;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.entity.Entity;
Expand All @@ -11,13 +12,15 @@
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
import net.minecraft.world.level.block.state.properties.EnumProperty;
import net.minecraft.world.level.gameevent.GameEvent;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.event.block.BlockRedstoneEvent;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;

@Mixin(DoorBlock.class)
public abstract class MixinDoorBlock extends Block{
Expand All @@ -34,26 +37,38 @@ public MixinDoorBlock(Properties properties) {
super(properties);
}

@Unique
private final AtomicInteger banner$power = new AtomicInteger();
@Unique
private final AtomicInteger banner$oldPower = new AtomicInteger();
@Unique
private org.bukkit.block.Block bukkitBlock;
@Unique
private BlockRedstoneEvent eventRedstone;

/**
* @author wdog5
* @reason
*/
@Overwrite
public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) {
// CraftBukkit start
BlockPos otherHalf = pos.relative(state.getValue(HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN);
World bworld = level.getWorld();
org.bukkit.block.Block bukkitBlock = bworld.getBlockAt(pos.getX(), pos.getY(), pos.getZ());
org.bukkit.block.Block blockTop = bworld.getBlockAt(otherHalf.getX(), otherHalf.getY(), otherHalf.getZ());

int power = bukkitBlock.getBlockPower();
int powerTop = blockTop.getBlockPower();
if (powerTop > power) power = powerTop;
int oldPower = (Boolean) state.getValue(POWERED) ? 15 : 0;
{
BlockPos otherHalf = pos.relative(state.getValue(HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN);
World bworld = level.getWorld();
bukkitBlock = bworld.getBlockAt(pos.getX(), pos.getY(), pos.getZ());
org.bukkit.block.Block blockTop = bworld.getBlockAt(otherHalf.getX(), otherHalf.getY(), otherHalf.getZ());

if (oldPower == 0 ^ power == 0) {
BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(bukkitBlock, oldPower, power);
level.getCraftServer().getPluginManager().callEvent(eventRedstone);
int power = bukkitBlock.getBlockPower();
int powerTop = blockTop.getBlockPower();
if (powerTop > power) power = powerTop;
banner$power.set(power);
int oldPower = (Boolean) state.getValue(POWERED) ? 15 : 0;
banner$oldPower.set(oldPower);
}
if (banner$oldPower.get() == 0 ^ banner$power.get() == 0) {
eventRedstone = new BlockRedstoneEvent(bukkitBlock, banner$oldPower.get(), banner$power.get());
Bukkit.getPluginManager().callEvent(eventRedstone);
boolean bl = eventRedstone.getNewCurrent() > 0;
if (bl != (Boolean) state.getValue(OPEN)) {
this.playSound((Entity) null, level, pos, bl);
Expand Down

0 comments on commit 732889a

Please sign in to comment.