ReyMagos
Тег-бомбастер
- 413
- 7
- 131
Наткнулся я как-то на мод, который делает все блоки скользкими, как лёд. Но всё бы ничего, но этот мод работает не только в одиночной игре, но и на серверах. И тут появился вопрос. Пакет о движении игрока формируется на клиенте что ли? Или есть какой спец пакет для скользких блоков? В любом случае посмотрел внутрь мода, а там:
1) Бам
2) Бам
То бишь просто замена метода, который возвращает скользкость (коэффицент скольжения, короче) блока. Но как это влияет на движение в мультиплеере - большой вопрос. Самоубийцы Кодеры на 1.16, это фича новых версий? Или это было и раньше и только я этого не знал? В любом случае буду благодарен за любую инфу. В том числе и за фикс.
1) Бам
JavaScript:
function initializeCoreMod() {
return {
'itemslip': {
'target': {
'type': 'METHOD',
'class': 'net.minecraft.entity.item.ItemEntity',
'methodName': 'func_70071_h_',
'methodDesc': '()V'
},
'transformer': function(method) {
var ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI');
var Opcodes = Java.type('org.objectweb.asm.Opcodes');
var instr = method.instructions;
var i;
var owner = "com/turtywurty/slipperymod/SlipperyMod";
var name = "getMultiplier";
var desc = "()F";
var needle;
for (i = 0; i < instr.size(); i++) {
var n = instr.get(i);
if (n.getOpcode() == Opcodes.INVOKEVIRTUAL) {
var m = n;
if (m.name.equals("getSlipperiness")) {
needle = m.getNext();
break;
}
}
}
if (needle != null) {
instr.set(needle, ASMAPI.buildMethodCall(owner, name, desc, ASMAPI.MethodType.STATIC));
}
return method;
}
}
}
}
Java:
private void setup(FMLCommonSetupEvent event) {
Iterator var2 = ForgeRegistries.BLOCKS.iterator();
while(var2.hasNext()) {
Block block = (Block)var2.next();
if (block.getRegistryName().func_110624_b().equals("minecraft")) {
block.field_149765_K = 1.0934095F;
}
}
}
public static float getMultiplier() {
return 0.91F;
}